【发布时间】:2023-01-22 12:02:14
【问题描述】:
我正在 Mac 上编辑一个名为“test.txt”的大型文本文件。大多数行以 # 开头,但有些行是制表符分隔的字段列表:
val1 val2 val3 val4 val5 val6 val7 val8 val9
我想做的是找到val2 = foo和val3 = bar的特定行(或者只是grep字符串foo \t bar,然后仅在这些行上,将val9替换为字符串val9=val9。所以如果 val9 是 'g1.t1',我会将其替换为 'g1.t1=g1.t1'
我能够想出以下命令:
fgrep -l -w 'foo bar' test.txt | xargs sed -i "" 's/\([^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\)\t\([^\t]*\)/\1\t\2=\2/'
找到这些行,并进行这些修改,但这只是打印出这些修改过的行。
我想将整个文件写回一个名为“test_edited.txt”的新文件,只进行这些更改。我觉得我想出的解决方案是依靠将 fgrep 的输出传送到 sed,不允许这样做。但也许我错过了什么?
欢迎任何建议!
谢谢!
【问题讨论】: