首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OS中的一行sed命令:替换特定行

OS中的一行sed命令:替换特定行
EN

Stack Overflow用户
提问于 2015-01-13 13:25:01
回答 2查看 1.2K关注 0票数 1

我想将sample.txt文件的第二行替换为文本4 5 6。在Linux中,我使用:

代码语言:javascript
复制
sed '2,2c\4 5 6' sample.txt

然而,在Mac中,这是行不通的。解决这个问题的方法是编写一个脚本,其中替换的文本应该保存在换行符中:

代码语言:javascript
复制
#!/bin/sh
sed -e "2,2c\\
4 5 6" sample.txt

注:-e和双引号" "在这里很重要(我不知道为什么)。

我的问题是,我能否将脚本合并成一行命令?*

当我想将它用作程序中的命令时,这将是有用的,比如在Fortran中。

我不愿意安装gnu-sed

让我再次总结一下:

cat sample.txt产量

代码语言:javascript
复制
1 2 3
1 2 3
7 8 9

使用单行命令,我希望将文件的内容修改为:

代码语言:javascript
复制
1 2 3
4 5 6
7 8 9
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-13 13:27:11

也许可以使用awk来实现更一致的行为:

代码语言:javascript
复制
$ awk 'NR==2 {$0="4 5 6"} 1' file
1 2 3
4 5 6
7 8 9

这告诉awkNR==2时做一些事情,也就是当我们在第2行时,这是用4 5 6替换行。

然后,1触发默认的awk操作:打印当前行。

更新

如果您想从另一个文件获取内容,只需将其存储在一个变量中:

代码语言:javascript
复制
awk -v file_info="$(cat another_file)" 'NR==2 {$0=file_info} 1' file

测试

代码语言:javascript
复制
$ 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
票数 2
EN

Stack Overflow用户

发布于 2015-01-13 14:15:39

您可以编写sed脚本并使用c\

代码语言:javascript
复制
$ cat myscript
2c\
4 5 6

然后:

代码语言:javascript
复制
$ cat sample.txt | sed -f myscript

另一个想法是使用s代替:

代码语言:javascript
复制
$ cat sample.txt | sed '2s/.*/4 5 6/'

结果是一样的,但是有额外的模式匹配操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27923250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档