首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用管道的多次sed vs sed

使用管道的多次sed vs sed
EN

Stack Overflow用户
提问于 2015-09-14 19:06:32
回答 2查看 702关注 0票数 2

我试图转换文件,可以有一个或多个行,并提取单词“三”。示例文件是oneliner:

代码语言:javascript
运行
复制
[test@test tmp]$ cat test1
onetwothreefourfive[pi@pidora tmp]$

我可以这样做:

代码语言:javascript
运行
复制
[test@test tmp]$ sed -e 's/.*two\(.*\)four.*/\1/' test1
three[pi@pidora tmp]$

但是我必须确保我的文件是oneliner的,所以我使用了这个问题中的命令:How can I replace a newline (\n) using sed?

代码语言:javascript
运行
复制
[test@test tmp]$ sed -e ':a;N;$!ba;s/\n/ /g' -e 's/.*two\(.*\)four.*/\1/' test1
onetwothreefourfive[pi@pidora tmp]$

它不起作用。

代码语言:javascript
运行
复制
[test@test tmp]$ sed -e ':a;N;$!ba;s/\n/ /g' test1| sed -e 's/.*two\(.*\)four.*/\1/'
three[test@test tmp]$

我用的是烟斗,而且很管用。请给我解释一下为什么sed没有管道就坏了。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-14 20:42:36

N替换为$!N或使用括号:

代码语言:javascript
运行
复制
sed ':a;$!{N;ba;};s/\n/ /g;s/.*two\(.*\)four.*/\1/' test1

回答你的下一个问题:我不知道为什么会起作用。

票数 1
EN

Stack Overflow用户

发布于 2015-09-14 19:22:41

当您使用两个操作运行一个sed命令时,它们都将在原始文本上执行,因此您的第二个操作不会“查看”由第一个操作添加的\n。

当您使用管道运行它时,第二个命令将在第一个输出上执行,因此第二个命令“看到”\n的

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

https://stackoverflow.com/questions/32572096

复制
相关文章

相似问题

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