不要那樣做,只是用awk,如:
awk -F'|' '
NR==FNR { if (NR==1) var = $2$4; next }
{ gsub(/<remote>.*<\/remote>/,"<remote> http://blabla/" var " </remote>"); print }
' file file2.xml > tmp && mv tmp file2.xml
隨着GNU awk的你可以使它更有效率,但除非你的第一個文件很大,否則它不會有明顯的區別:
awk -F'|' '
NR==FNR { var = $2$4; nextfile }
{ gsub(/<remote>.*<\/remote>/,"<remote> http://blabla/" var " </remote>"); print }
' file file2.xml > tmp && mv tmp file2.xml
WRT評論我在別人的崗位上做出了,這裏就是爲什麼你應該我們-v var=val
代替填充在AWK的args列表變量,除非你需要做的是改變文件(BEGINFILE的GNU AWK禮貌沒有必要之間的初始值):
以下腳本保存在3個文件中的值添加到一些初始種子值和打印結果爲每個文件,並在所有文件(種子是剛剛添加一次總)。 file2是空的:
$ cat file1
3
6
$ cat file2
$ cat file3
2
5
$ cat tst.awk
BEGIN {
print "seed value =", seed
for (i=1; i<ARGC; i++)
subtotal[ARGV[i]] = seed
total = seed
}
{
subtotal[FILENAME] += $0
total += $0
}
END {
for (filename in subtotal)
print "File", filename, "subtotal =", subtotal[filename]
print "total =", total
}
$
$ awk -v seed=7 -f tst.awk file1 file2 file3
seed value = 7
File file1 subtotal = 16
File file2 subtotal = 7
File file3 subtotal = 14
total = 23
一切正常嗎?現在,讓我們繼續前進的「種子」的設置到參數列表:
$ awk -f tst.awk seed=7 file1 file2 file3
seed value =
File file1 subtotal = 9
File file2 subtotal =
File file3 subtotal = 7
File seed=7 subtotal =
total = 16
注意的種子值從第一打印缺失,小計和總錯了,有一個輸出要打印的值一個名爲「seed = 7」的文件。
這一切都是可以解釋和預測的,一旦你確切地知道你在用awk做什麼,但我敢打賭,這對於一個新來者來說真是莫名其妙,所以恕我直言填充變量在arg列表中不應該是我們建議人們默認初始化它們的變量因爲它比-v variable=value
要少得多的直觀語義。
以上sed的命令將含糊失敗var'的'各種設置。 –