Gar*_*ver 5 sed text-processing quoting
在这里看到了一种使用 sed 在一行中的其他两个字符串之间获取文本的方法,例如:
sed 's/.*starting_text\(.*\)ending_text.*/\1/'
Run Code Online (Sandbox Code Playgroud)
但我想要一个简单的命令(比如tr
,但是用于字符串提取),它只需要两个字符串,并且会在第一个字符串之前或第二个字符串之后修剪所有内容,例如
grep something some_file | between message\"\:\" " with"
Run Code Online (Sandbox Code Playgroud)
并且会处理转义字符。
如果分隔符每行可能出现多次,您可以使用 perl 代替,例如:
between() {
perl -Tlne 'BEGIN{$b=shift;$e=shift}
print for /\Q$b\E(.*?)\Q$e\E/g' "$@"
}
Run Code Online (Sandbox Code Playgroud)
然后例如:
$ echo "[b]test[e] foo [b]bar[e]" | between '[b]' '[e]'
test
bar
Run Code Online (Sandbox Code Playgroud)
您还可以将其用作:
between BEG END file1 file2...
Run Code Online (Sandbox Code Playgroud)