設定
我有一個包含一些不完整行的檔案,例如以下示例中的第二個
cat file1.txt
7:|18.01-18.05|Un cambio a la partida 18.01 a 18.05 de cualquier otro capítulo.
7:|1806.10|Un cambio a la subpartida 1806.10 de cualquier otra partida, siempre que el
7:|1806.20|Un cambio a la subpartida 1806.20 de cualquier otra partida.
我將完整的句子存盤在一個名為的變數中p7
echo $p7
Un cambio a la subpartida 1806.10 de cualquier otra partida, siempre que el azúcar no originaria del Capítulo 17 no constituya más del 35 por ciento en peso del azúcar y el polvo de cacao no originario de la partida 18.05 no constituya más del 35 por ciento en peso del cacao en polvo.
期望的輸出
p7如果第二個欄位匹配1806.10如下,我正在嘗試替換最后一個欄位
cat file2.txt
7:|18.01-18.05|Un cambio a la partida 18.01 a 18.05 de cualquier otro capítulo.
7:|1806.10|Un cambio a la subpartida 1806.10 de cualquier otra partida, siempre que el azúcar no originaria del Capítulo 17 no constituya más del 35 por ciento en peso del azúcar y el polvo de cacao no originario de la partida 18.05 no constituya más del 35 por ciento en peso del cacao en polvo.
7:|1806.20|Un cambio a la subpartida 1806.20 de cualquier otra partida.
失敗的嘗試
cat file1.txt | sed -E "s/(7:\|1806\.10\|\|)(.*)$/\1${p7}/g" > file2.txt
不會替換 . 的第三個欄位p7。
2.
cat file1.txt | sed -z "s/(7:\|1806\.10\|\|)(.*)$/\1${p7}/g" > file2.txt
給出錯誤sed: -e expression #1, char 320: invalid reference \1 on s' 命令的 RHS`。
3.
cat file1.txt | sed -z "s/7:\|1806\.10\|\|.*/7:\|1806\.10\|\|${p7}/g" > file2.txt
替換最后一個欄位,但洗掉檔案中的所有其他內容。
我究竟做錯了什么?
uj5u.com熱心網友回復:
這個簡單的awk程式可以幫助你。這確實是一項awk任務,與恕我直言相比,在這里更容易處理sed。
##Shell variable which has test value shown by OP.
p7="Un cambio a la subpartida 1806.10 de cualquier otra partida, siempre que el azúcar no originaria del Capítulo 17 no constituya más del 35 por ciento en peso del azúcar y el polvo de cacao no originario de la partida 18.05 no constituya más del 35 por ciento en peso del cacao en polvo."
awk需要運行的代碼是:
awk -v p7="$p7" 'BEGIN{FS=OFS="|"} $2==1806.10{$NF=p7} 1' Input_file
解釋:簡單的解釋是,將 shell 變數傳遞p7給awk變數名也是p7. 然后在主程式設定FS和OFS中|,如果第二個欄位1806.10將最后一個欄位設定為 p7。1是一種awk列印當前行的方式。
uj5u.com熱心網友回復:
使用sed
$ sed "/[^|]*|1806.10/{s/\(\([^|]*|\)\{2\}\).*/\1$p7/}" input_file
7:|18.01-18.05|Un cambio a la partida 18.01 a 18.05 de cualquier otro capítulo.
7:|1806.10|Un cambio a la subpartida 1806.10 de cualquier otra partida, siempre que el azúcar no originaria del Capítulo 17 no constituya más del 35 por ciento en peso del azúcar y el polvo de cacao no originario de la partida 18.05 no constituya más del 35 por ciento en peso del cacao en polvo.
7:|1806.20|Un cambio a la subpartida 1806.20 de cualquier otra partida.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/468610.html
