我有一个输入列表,我想从中删除变量字符串的出现。假设我的输入列表如下所示:
(BLA-123) some text
BLA-123 some text
BLA-123: some text
some text (BLA-123)
some text BLA-123
我希望我的输入列表如下所示:
some text
some text
some text
some text
some text
基本上,我需要删除任何可能以 (
和 )
或后跟:
BLA-[0-9]{1,4}
的所有出现,无论是从输入列表中任何行的开头还是结尾。
我想过使用cut
但很难实现我需要的东西。然后我想到了sed
,我相信这是要走的路,但我几乎没有经验。
也许:
sed 's/ *[(]*[A-Z][A-Z]*-[0-9]{1,4}[):]* *//'
我[A-Z][A-Z]*
用任意的大写字符串替换了BLA
,因为我不知道您是否将其作为问题描述中的元变量。
如果你有GNU sed
,这可以通过使用?
和+
稍微改进:
sed 's/ *[(]?[A-Z]+-[0-9]{1,4}[):]? *//'
但是,这些转换:
some text BLA-123 more text
自:
some textmore text
这可能不是你想要的。如果您希望这样的行保持不变,则可以将替换加倍,修改第一个,使其仅在开头匹配,第二行使其在末尾匹配:
sed 's/^ *[(]?[A-Z]+-[0-9]{1,4}[):]? *//;s/ *[(]?[A-Z]+-[0-9]{1,4}[):]? *$//'
这不是很理想...但有效:
$ sed -e 's/(BLA-[0-9]*)[ ]*//g' -e 's/BLA-[0-9]*:[ ]*//g' -e 's/BLA-[0-9]*[ ]*//g' a
some text
some text
some text
some text
some text
-
s/(BLA-[0-9]*)[ ]*//g
删除(BLA-XXXX)
加上最终的尾随空格。 -
s/BLA-[0-9]*:[ ]*//g
删除BLA-XXXX:
加上最终的尾随空格。 -
s/BLA-[0-9]*[ ]*//g
删除BLA-XXXX
加上最终的尾随空格。
这是我想到的:
sed -E 's/[[:punct:]]?BLA-[[:digit:]]{1,4}[[:punct:]]?[[:space:]]*//'
在某些输出行的末尾有一个尾随空格,您可以通过在开头放置[[:space:]]*
来消除。
sed 's/ *(BLA-[0-9]{1,4}) *//
s/ *BLA-[0-9]{1,4}:{0,1} *//' YourFile
避免打开(
而不关闭)
您可以使用 awk 单行:
$ cat toto
(BLA-123) some text
BLA-123 some text
BLA-123: some text
some text (BLA-123)
some text BLA-123
$ awk '{for (i=0;i<=NF;i=i+1) if ($i!~/BLA/) printf $i" "}{printf "n"}' toto
some text
some text
some text
some text
some text
可以通过以下方式翻译
对于每一行(awk 通过逐行解析来工作),对于每个字段(NF 是字段数,即列),是不包含您打印它的 BLA i
列号。在每行之后,打印"n"
希望这有帮助。