我有一个文本文件,其中包含数百行。我想删除/*
=
中的每一行。这是一个示例:
/* Class = "UIButton"; normalTitle = "GET SUPPORT"; ObjectID = "2SP-lc-CRF"; */
"2SP-lc-CRF.normalTitle" = "GET SUPPORT";
/* Class = "UIButton"; normalTitle = "TAKE PHOTO"; ObjectID = "4Dp-dN-aZh"; */
"4Dp-dN-aZh.normalTitle" = "TAKE PHOTO";
/* Class = "UIButton"; normalTitle = "WHATSAPP"; ObjectID = "4J2-uX-p15"; */
"4J2-uX-p15.normalTitle" = "WHATSAPP";
所以我剩下的就是:
"GET SUPPORT";
"TAKE PHOTO";
"WHATSAPP";
我是一个shell脚本菜鸟,所以我没有太多的文本处理经验。我知道一些基本命令。这是我到目前为止的内容:
#!/bin/bash
sed 's//*.**/://' Test > RESULT.txt
它似乎不起作用。我最后遇到一个错误:
sed: 1: "s//*.**/://": bad flag in substitute command: ':'
有什么想法吗?
答案 0 :(得分:1)
您可以使用此sed
删除所有/* ... */
行:
sed '/\/\*.*\*\//d; s/^.*= *//' Test > RESULT.txt
cat RESULT.txt
"GET SUPPORT";
"TAKE PHOTO";
"WHATSAPP";
/
和*
字符都是特殊的正则表达式元字符,需要转义。/d
命令删除给定模式的行。s/^.*= *//
命令删除文本,直到每次删除都=<space>
为止。答案 1 :(得分:0)
除了sed
,您还可以awk
达到相同的效果,例如
$ awk -F' = ' '/\/\*.*\*\/$/{next} /^$/{next} {print $2}' file
"GET SUPPORT";
"TAKE PHOTO";
"WHATSAPP";
本质上,它们使用相同的正则表达式来跳过包含注释的行或使用next
的空行,仅打印未跳过的行的第二个字段。