如何用Linux中的新行替换Pipe?

时间:2016-02-26 17:48:31

标签: linux shell command-line scripting

如果之前有人问过这个问题,请接受我的道歉。我是新人,不知道该怎么做。我有一个包含如下数据的文件:

name=1|surname=2|phone=3|email=4
phone=5|surname=6|name=7|email=8
surname=9|phone=10|email=11|name=12
phone=13|email=14|name=15|surname=6

我想要一个这样的文件:

name=1
name=7
name=12
name=15

提前致谢!

2 个答案:

答案 0 :(得分:1)

假设names.txt是你的文件,然后使用类似的东西:

cat names.txt  | tr "|" "\n" | grep "^name="
  • tr|转换为换行符
  • grep过滤了名称为
  • 的行

这是GNU awk的一个命令解决方案:

 awk -v RS="[|\n]" '/^name=/' names.txt 
  • -v RS="[|\n]' set the record separatro to |`或换行符
  • /^name=/开头的记录的name=过滤器(并隐式打印出来)

答案 1 :(得分:0)

我会选择@Lars的解决方案,但我想用“lookbehind”来测试它。 使用grep,您只能使用grep -o获得匹配,但以下行也会找到姓氏:

grep -o "name=[0-9]*" names.txt

您可以通过查找姓名前的字符(^|行的开头)来解决此问题。

grep -o "(^|\|)name=[0-9]*" names.txt

真正的解决方法!现在你得到了正确的名字,但有时会额外加| 使用\ K(和grep选项-P),您可以告诉grep使用某些内容进行匹配,但在输出期间跳过它。

grep -oP "(^|\|)\Kname=[0-9]*" names.txt