我想用sed
命令编写一个脚本,因为我猜这是最适合我目标的命令。
有一个名为NAME
的文件,它由在列中排序的不同名称组成,如:
STEVE
JOHN
CLARE
脚本应该:
$value
档案NAME
$value
替换为常量值(' ARNOLD')sed 's/"'$i'"/ARNOLD/g' test1.log>test2.log
(test1和test2文件完全相同)。我准备了我的脚本版本,但它仅适用于名称列表中的最新值:
while read i; do sed 's/'"$i"'/ARNOLD/g' test1.log >test2.log ; done<name
答案 0 :(得分:1)
您可以使用sed生成更改,然后使用第一个输出作为另一个sed的脚本来阅读
sed 's/.*/s\/&\/ARNOLD\/g/' NAME | sed -f- test1.log >test2.log
sed 's/.*/s\/&\/ARNOLD\/g/'
创建
s/STEVE/ARNOLD/g
s/JOHN/ARNOLD/g
s/CLARE/ARNOLD/g
然后通过管道传输到
sed -f-
-f
读取脚本文件
-
是管道的标准配置
答案 1 :(得分:0)
每次脚本循环时,都会以未修改的test1.log
开头并更改一个名称。这意味着只有更改的姓氏才会显示在test2.log
。
每个循环取消所有先前的更改。
答案 2 :(得分:0)
从原始test1.log制作副本时,可以覆盖test1.log。
您可以使用sed -i
或
sed 's/'"$i"'/ARNOLD/g' test1.log >test2.log && mv test2.log test1.log
此解决方案需要大量I / O,并且比@ Ed的解决方案更糟糕。 我刚刚添加它以显示@msw注意到的问题是如何解决的。