如果之前有人问过这个问题,请接受我的道歉。我是新人,不知道该怎么做。我有一个包含如下数据的文件:
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
提前致谢!
答案 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