Regex 使用awk删除不规则表达式

Regex 使用awk删除不规则表达式,regex,awk,Regex,Awk,我面临着一个问题,我无法逃避。 我正在用以下行解析文件: word1 word2 #(one, two, three) word3(x y z) word4(a b c) etc 我需要删除所有的子串1,2,3,识别这个子串的唯一约束是它以开始和结束 字段号或子字符串的内容不规则 你能给我一些建议吗? 提前谢谢 首先,我喜欢这个词:你问题中的不规则表达 试试这句话: awk -F'#\\([^)]*\\)' '{$1=$1}7' file 测试: 你可以说: awk '{gsub("#([^

我面临着一个问题,我无法逃避。 我正在用以下行解析文件:

word1 word2 #(one, two, three) word3(x y z) word4(a b c)
etc
我需要删除所有的子串1,2,3,识别这个子串的唯一约束是它以开始和结束 字段号或子字符串的内容不规则

你能给我一些建议吗?
提前谢谢

首先,我喜欢这个词:你问题中的不规则表达

试试这句话:

awk -F'#\\([^)]*\\)' '{$1=$1}7' file
测试:

你可以说:

awk '{gsub("#([^)]*))", "", $0);}1' inputfile
请输入:

$ awk '{gsub("#([^)]*))", "", $0);}1' <<< 'word1 word2 #(one, two, three) word3(x y z) word4(a b c)'
word1 word2  word3(x y z) word4(a b c)

从您的标记中,我看到您怀疑awk可以做到这一点,但Perl也可以做得很好:

perl -pe 's/#\([^)]*\)//g'
或者,作为您的完整示例:

echo "word1 word2 #(one, two, three) word3(x y z) word4(a b c)" | perl -pe 's/#\([^)]*\)//g'
或者,如果您的数据位于文件中:

perl -pe 's/#\([^)]*\)//g' your_file

为了澄清,我使用的RE表示替换一个散列,后跟一个开始括号,然后是任意数量的非结束括号的字符,最后是一个没有任何内容的结束括号。括号是转义的,因为它们是Perl中的分组运算符。

当您谈到删除时,我想您可能需要更改输入文件本身。您可以在nedit中进行查找和替换。 要查找的字符串:^.*$\n 替换为:


因为这是一行上的简单替换,所以sed完全适合此工作:

$ sed 's/#([^)]*)//' file
word1 word2  word3(x y z) word4(a b c)
但如果您需要awk解决方案:

$ awk '{sub(/#([^)]*))/,"")}1' file
word1 word2  word3(x y z) word4(a b c)

在sed命令的末尾添加g,或者在awk中将sub更改为gsub(如果模式可以在每行上出现多次)。

请删除“设计模式”标签。你的问题与设计模式无关。
$ awk '{sub(/#([^)]*))/,"")}1' file
word1 word2  word3(x y z) word4(a b c)