![如何获取(多行)第一个匹配的子字符串?](https://linux22.com/image/127056/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%EF%BC%88%E5%A4%9A%E8%A1%8C%EF%BC%89%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%8C%B9%E9%85%8D%E7%9A%84%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%9F.png)
我有一个文件,内容如下
/hello="somestuffsomestuffsomestuffsomestuffsomestuffsomestuffsomestuff
somestuffsomestuffsomestuffsomestuffsomestuffsomestuffsomestuff
somestuffsomestuffsomestuffsomestuffsomestuffsomestuffsomestuff"
/hello="morestuffmorestuffmorestuffmorestuffmorestuffmorestuffmorestuff
morestuffmorestuffmorestuffmorestuffmorestuff"
我怎样才能得到公正
/hello="somestuffsomestuffsomestuffsomestuffsomestuffsomestuffsomestuff
somestuffsomestuffsomestuffsomestuffsomestuffsomestuffsomestuff
somestuffsomestuffsomestuffsomestuffsomestuffsomestuffsomestuff"
我sed
通过管道获取以“/”分隔的/hello
内容cut
,但我不知道如何获取第一个子字符串。
我使用的命令
sed -n '/hello/, /\"/ p' file.txt | cut -d "/" -f 2
由于某种原因,它将每个子字符串分成两个字段;第一行,然后是其余行。
答案1
要么使用这个:
sed -n '/hello/,/"$/p;/"$/q' infile
或者这个等式:
sed '/hello/,/"$/!d;/"$/q' infile
或者awk
也与(假设总是第一行有hello
):
awk '/hello/ || 1;/"$/{exit}' infile
否则使用标志来管理它。
awk '/hello/{prnt=1};prnt;/"$/{exit}' infile
答案2
我已经通过下面的 sed 命令完成了
sed '0,/hello.*/!s///' inputfile| sed '/^\/$/,$d'
输出
/hello="somestuffsomestuffsomestuffsomestuffsomestuffsomestuffsomestuff
somestuffsomestuffsomestuffsomestuffsomestuffsomestuffsomestuff
somestuffsomestuffsomestuffsomestuffsomestuffsomestuffsomestuff"
答案3
另一种方法
sed -n '/\/hello/,/"$/p;/"$/q' iputfile
输出
/hello="somestuffsomestuffsomestuffsomestuffsomestuffsomestuffsomestuff
somestuffsomestuffsomestuffsomestuffsomestuffsomestuffsomestuff
somestuffsomestuffsomestuffsomestuffsomestuffsomestuffsomestuff"