Shell 删除两组字符之间的所有文本
我有一个文本文件,其中包含数百行这样的内容。我想删除包装在Shell 删除两组字符之间的所有文本,shell,sh,Shell,Sh,我有一个文本文件,其中包含数百行这样的内容。我想删除包装在/*=中的每一行。以下是一个示例: /* Class = "UIButton"; normalTitle = "GET SUPPORT"; ObjectID = "2SP-lc-CRF"; */ "2SP-lc-CRF.normalTitle" = "GET SUPPORT"; /* Class = "UIButton"; normalTitle = "TAKE PHOTO"; ObjectID = "4Dp-dN-aZh"; */ "
/*
=
中的每一行。以下是一个示例:
/* 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脚本的noob,所以我对文本操作没有太多经验。我知道一些基本命令。以下是我目前掌握的情况:
#!/bin/bash
sed 's//*.**/://' Test > RESULT.txt
它似乎不起作用。我最后犯了一个错误:
sed: 1: "s//*.**/://": bad flag in substitute command: ':'
有什么想法吗?您可以使用此
sed
删除所有/**/代码>行:
sed '/\/\*.*\*\//d; s/^.*= *//' Test > RESULT.txt
cat RESULT.txt
- 请注意,
/
和*
字符都是需要转义的特殊正则表达式元字符
/d
命令删除给定图案的线条
s/^.*/
命令删除文本,直到每次删除中=
除了sed
,您还可以awk
达到相同的效果,例如:
$ awk -F' = ' '/\/\*.*\*\/$/{next} /^$/{next} {print $2}' file
"GET SUPPORT";
"TAKE PHOTO";
"WHATSAPP";
它基本上使用相同的正则表达式跳过包含注释的行或空行,而next
只打印未跳过行的第二个字段。对不起,我弄错了。我更新了我的问题!我的意思是介于/*
和=
之间。是的,先生。“获得支持”;“拍照”;“WHATSAPP”;=
是否也被视为特殊的正则表达式字符?每个注释后是否有未注释的行,例如“2SP lc CRF.normalTitle”=“GET SUPPORT”代码>?而且no=
不是特殊字符。这非常有效。我希望我能更好地理解它。非常感谢!
$ awk -F' = ' '/\/\*.*\*\/$/{next} /^$/{next} {print $2}' file
"GET SUPPORT";
"TAKE PHOTO";
"WHATSAPP";