我有两个名为 tmp 文件tmp1
,tmp2
其中包含一些行。
tmp1 文件,
1c\
datafile no. 23
2c\
datafile is ok
tmp2 文件,
3c\
datafile no. 24
4c\
datafile is ok
我有一个文件(名为wrong_file
),我想从 tmp 文件中更正其中的条目
datafile no. 32
datafile is ok
datafile no. 42
datafile is ok
我的输出文件(modified_file
)将是这样的,
datafile no. 23
datafile is ok
datafile no. 24
datafile is ok
我想使用 for 循环,它将运行到最后一个 tmp 文件并将数据从 tmp 文件写入最终文件(输出),而不是手动执行。
我努力了,
sed -f tmp1 wrong_file > file1
sed -f tmp2 file1 > modified_file
答案1
我很确定你可以这样做:
cat ./tmp[12] | sed -f - ./wrong_file >outfile
sed
至少,如果所有脚本指令都特定于行号,则不会导致任何问题。无需单独应用脚本 - 您可以将它们全部链接在一起并立即运行脚本。
然而,你必须这样做,这表明重复工作。这里是脚本的副本sed
,它可以避免首先写入任何临时文件,而只需扫描输入以查找需要更改的行,然后将流中的所有脚本sed
一次性传递到最终脚本:
{ sed '/^#\.tid\.setnr/!d;=;g;G' |
paste -d'c\\\n' - - - ./addfile
} <./mainfile | sed -f - ./mainfile
它的输出与您此处的示例数据不同,因为它是根据您在其他问题。但它完全避免编写修改脚本,并将所有编辑命令发送到sed
可以立即采取行动的进程。
一般来说,您可以认为一个sed
进程已经准备好处理其脚本输入,就像它也准备好处理其编辑内容输入一样。-