我现在有这个代码
cat -n rfile | sed -n '/"semantic_url":"/,/","/p'
其中 rfile 是一个包含大量文本的文件。我试图提取每个之间的所有内容
"semantic_url":"
(包括双引号和最后一个双引号。)
下一个模式是这样的:
","
我不确定我做错了什么。我已经为此工作了很长时间,阅读了一个又一个的手册页并进行了谷歌搜索。我究竟做错了什么?
它不仅让我返回这些模式之间的内容。它让我恢复了一切。
输入示例。
"semantic_url":"number1","thisorthat"semantic_url":"number2","somecode"semantic_url":"number3","somemorecode
输出示例
number1, number2, number3
答案1
sed -netP -e's/"semantic_url":"\([^"]*\)","/\n\1\n/;D' \
-e:P -e'P;D' <in >out
...如果我理解您对问题的描述,并且如果开始和结束引号位于同一行,并且只要 和 之间的位"semantic_url":"
不","
包含双引号,那么将仅打印您的定界字符串以及在每条输出线一对上找到的每对之间的所有内容。
如果您想要连接输出行,我可以为此编写一些东西,但添加另一个可能会更容易sed
:
sed -netP -e's/"semantic_url":"\([^"]*\)","/\n \1\n/;D' \
-e:P -e'P;//!=;D' <in|\
sed -e'/^[^ ].*/!{H;d;}' \
-e's///;x;s/\n.//;s//,/g'
我将上面的管道输入输入为:
"semantic_url":"number1","thisorthat"semantic_url":"number2","somecode"semantic_url":"number3","somemorecode
"semantic_url":"number4","thisorthat"semantic_url":"number5","somecode"semantic_url":"number6","somemorecode
"semantic_url":"number7","thisorthat"semantic_url":"number8","somecode"semantic_url":"number9","somemorecode
它打印了:
number1,number2,number3
number4,number5,number6
number7,number8,number9