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";