簡體   English   中英

在 shell 腳本中處理 sed 命令中的反向引用

[英]Dealing with backreference in a sed command inside a shell script

我正在嘗試在 shell 腳本中使用 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

3.

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

根據@EdMorton 的評論,我可以找到這個問題的答案,我不得不稍微修改一下他提出的建議,但最后我意識到這不是我需要的,我應該這樣做grep,這里的任何方式都是完成問題所暗示的正確代碼,以及我使用的最終 grep 命令(我從這里學到的)

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\\"'>/從起始行開始的 RegEx

{N;/<seg>/來自終點線的 RegEx

{N;s/<tuv xml:lang='\\"$ol\\"'>\\n\\s+<seg>(.*)<\\/seg>搜索到的完整正則表達式

/\\1/(.*)元素的反向引用

grep 命令:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM