2017-10-16 5 views
0

이 웹 페이지는 .txt 파일로 다운로드 이름을 ID를 사용 SED. 저장된이 파일의 이름은 웹 페이지의 URL 부분을 사용하여 지정됩니다 (예 : 편의를 위해 wget http://www.example.com/page/12345/ -O 12345.txt. 그것은 예를 들어 여러 명령, 한 번에 하나의 라인을 실행할 수사용 txt 파일에서 ID를 찾아 파일 wget을 사용

나는, 쉘 스크립트 .sh 파일에서 명령을 실행하고 있습니다. 파일 다운로드가 완료되면

, 난 유지하려는 텍스트/문자를 구문 분석하는 데 나오지도 사용합니다. 원하는 텍스트 부분에 blah blah Product ID a5678이 포함됩니다.

제가 원했던 것은을 찾기 위해 sed를 사용하고 12345.txt 파일의 이름을 a5678.txt로 바꾸는 것입니다.

# script.sh 
wget http://www.example.com/page/12345/ -O 12345.txt 
sed -i '' 's/pattern/replace/g' 12345.txt 
sed command to find a5678 # in line blah blah Product ID a5678 
some more sed commands 
mv 12345.txt a5678.txt (or use a variable $var.txt)? 

어떻게하면됩니까?

이 동일한 ID a5678을 사용하고 동일한 이름의 폴더를 a5678으로 만들 수도 있습니다. 따라서 .txt 파일은 /a5678/a5678.txt과 같은 폴더 안에 있습니다.

mkdir a5678 (or mkdir $var)? && cd a5678 

나는 반나절 동안 답변을 검색했지만 찾을 수 없습니다. 내가 찾은 가장 가까운 것이 Find instance of word in files and change it to the filename이지만 정확히 내가 원하는 것과 반대입니다. 또한 변수 사용에 대해서도 생각해 봤습니다. https://askubuntu.com/questions/76808/how-do-i-use-variables-in-a-sed-command하지만 발견 된 문자를 변수로 저장하는 방법을 모르겠습니다.

매우 많은 도움을 기대합니다! 고맙습니다! 나는 시에라를 운영하는 맥에있다.

+0

당신이 파일의 _replacing_ 문자는하지 않는 한, 나는 단지'대신 grep' 사용할 수 있습니다 : 당신의 영감으로, 나는 (그렙를 사용하지 않고)에 의해 내 문제를 해결 . (여러 일치를 방지하기 위해)은'grep'에'-m 1 '플래그를 추가하고, [$ 아웃]은'경우 추가; 또는 ... – jdv

답변

1

하는 것은 최소화하기 위해 노력하는, 그래서 당신의 논리로이 맞습니다.

in=12345.txt 
out=$(grep ' Product ID ' $in | sed 's/.* Product ID \([^ ]*\) .*/\1/') 
mkdir -p $out 
mv $in $out/$out.txt 
+1

내가 제안 할 수있는 개조의 몇 펄로 전환 then''mkdir'과'mv' 명령을 사용하여 문자열을 찾지 않으면 이상한 행동을하지 않게됩니다. – HardcoreHenry

0

감사합니다. 내가 이름 변경에 필요한 문자열을 추출하는 결과를 절단,

in=12345 
out=$(sed -n '/pattern/ s/.*ID *//p' $in.txt) 
mv $in.txt $out.txt 
cd .. 
mv $in $out 
+0

그리고 나는 마침내'-n' -'/ p' 콤보, lol을 알아 냈다고 생각합니다. 감사. :) –