我想将sample.txt文件的第二行替换为文本4 5 6。在Linux中,我使用:
sed '2,2c\4 5 6' sample.txt然而,在Mac中,这是行不通的。解决这个问题的方法是编写一个脚本,其中替换的文本应该保存在换行符中:
#!/bin/sh
sed -e "2,2c\\
4 5 6" sample.txt注:-e和双引号" "在这里很重要(我不知道为什么)。
我的问题是,我能否将脚本合并成一行命令?*
当我想将它用作程序中的命令时,这将是有用的,比如在Fortran中。
我不愿意安装gnu-sed。
让我再次总结一下:
cat sample.txt产量
1 2 3
1 2 3
7 8 9使用单行命令,我希望将文件的内容修改为:
1 2 3
4 5 6
7 8 9发布于 2015-01-13 13:27:11
也许可以使用awk来实现更一致的行为:
$ awk 'NR==2 {$0="4 5 6"} 1' file
1 2 3
4 5 6
7 8 9这告诉awk在NR==2时做一些事情,也就是当我们在第2行时,这是用4 5 6替换行。
然后,1触发默认的awk操作:打印当前行。
更新
如果您想从另一个文件获取内容,只需将其存储在一个变量中:
awk -v file_info="$(cat another_file)" 'NR==2 {$0=file_info} 1' file测试
$ cat f1
1 2 3
1 2 3
7 8 9
$ cat f2
hello this is me
and that is another thing
$ awk -v f="$(cat f2)" 'NR==2 {$0=f} 1' f1
1 2 3
hello this is me
and that is another thing
7 8 9发布于 2015-01-13 14:15:39
您可以编写sed脚本并使用c\
$ cat myscript
2c\
4 5 6然后:
$ cat sample.txt | sed -f myscript另一个想法是使用s代替:
$ cat sample.txt | sed '2s/.*/4 5 6/'结果是一样的,但是有额外的模式匹配操作。
https://stackoverflow.com/questions/27923250
复制相似问题