首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用单个sed调用来拆分和grep

使用单个sed调用来拆分和grep
EN

Stack Overflow用户
提问于 2019-06-26 19:24:26
回答 2查看 146关注 0票数 6

这主要是出于好奇心,我试图拥有相同的行为:

代码语言:javascript
复制
echo -e "test1:test2:test3"| sed 's/:/\n/g' | grep 1

在单个sed命令中。

我已经试过了

代码语言:javascript
复制
echo -e "test1:test2:test3"| sed -e "s/:/\n/g" -n "/1/p"

但我得到以下错误:

代码语言:javascript
复制
sed: can't read /1/p: No such file or directory

你知道如何修复这个问题并将不同类型的命令组合到单个sed调用中吗?

当然,与真实的用例相比,这过于简单了,而且我知道我可以通过使用多个调用来解决问题,同样,这只是出于好奇。

编辑:我最感兴趣的是sed工具,我已经知道如何使用其他工具,甚至是这些工具的组合。

EDIT2:这是一个更现实的脚本,更接近我想要实现的目标:

代码语言:javascript
复制
arch=linux64
base=https://chromedriver.storage.googleapis.com
split="<Contents>"
curl $base \
    | sed -e 's/<Contents>/<Contents>\n/g' \
    | grep $arch \
    | sed -e 's/^<Key>\(.*\)\/chromedriver.*/\1/' \
    | sort -V > out

我想要简化的是卷曲线,把它变成类似于:

代码语言:javascript
复制
curl $base \
 | sed 's/<Contents>/<Contents>\n/g' -n '/1/p' -e 's/^<Key>\(.*\)\/chromedriver.*/\1/' \
 | sort -V > out
EN

回答 2

Stack Overflow用户

发布于 2019-06-27 05:08:57

这可能适用于您(GNU sed):

代码语言:javascript
复制
sed 's/:/\n/;/^[^\n]*1/P;D' file

替换每个:,如果模式空间中的第一行包含1,则打印它。重复一遍。

另一种选择:

代码语言:javascript
复制
sed -Ez 's/:/\n/g;s/^[^1]*$//mg;s/\n+/\n/;s/^\n//' file

这会将整个文件存储到内存中,并用换行符替换所有冒号。删除所有不包含1的行,并删除多余的换行符。

票数 2
EN

Stack Overflow用户

发布于 2019-06-27 07:32:35

这根本不是sed的工作。使用多字符RS的GNU awk:

代码语言:javascript
复制
$ echo "test1:test2:test3:test4:test5:test6"| awk -v RS='[:\n]' '/1/'
test1

$ echo "test1:test2:test3:test4:test5:test6"| awk -v RS='[:\n]' 'NR%2'
test1
test3
test5

$ echo "test1:test2:test3:test4:test5:test6"| awk -v RS='[:\n]' '!(NR%2)'
test2
test4
test6

$ echo "foo1:bar1:foo2:bar2:foo3:bar3" | awk -v RS='[:\n]' '/foo/ || /2/'
foo1
foo2
bar2
foo3

对于任何\n,在对其进行操作之前,您只需从最终记录中剥离它:

代码语言:javascript
复制
$ echo "test1:test2:test3:test4:test5:test6"| awk -v RS=':' '{sub(/\n$/,"")} /1/'
test1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56771698

复制
相关文章

相似问题

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