2017-10-16 1 views
-1

사용자와 상호 작용하는 동안 변수를 사용하는 쉘 스크립트에서 sed 명령을 사용하려고하지만 역 참조 I로 인해 작동하지 않게하려고합니다. 그것에서 사용하십시오 .... 어떤 도움 ...?쉘 스크립트 내 sed 명령에서 역 참조 다루기

스크립트 :

echo "Origin language?\n" 
read ol 
echo "\nTarget language?\n" 
read tl 
echo "\ntmx file name?\n" 
read file 

는 다음의 sed 명령에 내가 시도 이러한 방법 :

1

sed -r "s/lang=\"$ol\">(.*)$/\1/g" "$file" > ${file}_${ol}.txt 
sed -r "s/lang=\"$tl\">(.*)$/\1/g" "$file" > ${file}_${tl}.txt 

2

thisol = "<tuv xml:lang=\"$ol\">(.*)$" 
thistl = "<tuv xml:lang=\"$tl\">(.*)$" 

sed -r "s/$thisol/\1/g" "$file" > ${file}_${ol}.txt 
sed -r "s/$thistg/\1/g" "$file" > ${file}_${tl}.txt 
나는이 질문에 대한 답을 찾을 수 @EdMorton에 의해 만들어진 주석을 바탕으로
thisol = "<tuv xml:lang=\"$ol\">(.*)$" 
thistl = "<tuv xml:lang=\"$tl\">(.*)$" 
that = "\\\1" 

sed -r "s/$thisol/$that/g" "$file" > ${file}_${ol}.txt 
sed -r "s/$thistg/$that/g" "$file" > ${file}_${tl}.txt 
+1

. '\ (. * \) '와 같이. – tvm

+0

그건 내가 실수로 시도한 것들 중 하나 였지만 나는 다시 시도했지만 성공하지 못했습니다 .... –

+0

'sed -E 's/lang =' "$ ol" '> (. *) $/\ 1/g ' "$ file"> "$ {file} _ $ {ol} .txt". –

답변

0

3.

, 나는 약간의 그를 만든 제안을 수정했지만, 마지막에 나는 실현 이것은 내가 필요로하는 것이 아니고, grep로 수행해야만한다. 질문에 함축되어있는 것을 달성하기위한 올바른 코드와 내가 사용한 최종 grep 명령 ( here에서 배운)

sed 명령 :

sed -r '/<tuv xml:lang='\"$ol\"'>/{N;/<seg>/{N;s/<tuv xml:lang='\"$ol\"'>\n\s+<seg>(.*)<\/seg>/\1/}}' "$file.tmx" > "${file}_${ol}.txt" 

여기서

/<tuv xml:lang='\"$ol\"'>/ 결승선

{N;s/<tuv xml:lang='\"$ol\"'>\n\s+<seg>(.*)<\/seg> 검색된 전체 정규식

/\1/(.*) 요소에 역 참조에서 출발 선

{N;/<seg>/ 정규식에서 정규식

,

grep 명령 : 당신은 당신이 따옴표를 사용하는 경우 역 참조의 괄호를 탈출 할 필요가

grep -Pzo "<tuv xml:lang=\"$ol\">\n\s+<seg>(.*)<\/seg>" "$file.tmx" > "${file}_${ol}.txt"