就像我有一个数据,一个具有开括号,另一个具有闭括号。我期待像我有txt文件,我有两个错误,而进入和失踪想回显所有的开放,但没有关闭的发生,而另一个是如果只有关闭本.我使用bash代码,但它只显示开放的发生,但没有关闭括号我的代码是grep -E '^[^()]*\([^()]*$|^[^()]*[^()]*\([^()]*$',这只显示( abc的结果但不是abc)。请帮助我谢谢。
grep -E '^[^()]*\([^()]*$|^[^()]*[^()]*\([^()]*$'
( abc
abc)
b91juud31#
也许这个正则表达式就是你要找的
grep -E '^[^()]*[()]{1}[^()]*$'
字符串
xuo3flqw2#
grep是高度优化的,所以不完全 * 可编程 *。我使用sed。
grep
sed
$: cat file foo 1 -> (abc bar baz 2-> abc) a,b,c,(d,e,(f,g,h),k,l),m,n,(0 qux ( ( ( ( ) ) ( ) ( ( ) ) ) ) ( ( ) ( ) -> ) (
字符串这在GNU sed中运行得很好:
$: sed -n 'h; :x; s/([^()]*)//; tx; /[()]/{=;x;p}' file | paste -d: - - 2: 1 -> (abc 5: 2-> abc) 6: a,b,c,(d,e,(f,g,h),k,l),m,n,(0 8: ( ( ( ( ) ) ( ) ( ( ) ) ) ) ( ( ) ( ) -> ) (
型越狱了--n表示n o打印,除非明确要求。h表示h在保持缓冲区中保留原始文本行,以便稍后报告。:x声明了一个label,用于循环返回,见下文。s/([^()]*)//删除了最里面的 * 匹配对 * 括号。tx循环回x标签 *,如果进行了替换 *。/[()]/{...}扫描这一行,看看上面是否还有括号.=报告行号。x将e x更改h eld原件的编辑行,以便p可以p rint它,因为它有不匹配的括号。我将它通过paste -d: - -传输,以便将行号和行放在输出的同一行上。我 * 认为 * 唯一特定于GNU的特性是使用分号而不是换行符,所以如果需要的话,它应该很容易适应。
-n
n
h
:x
label
s/([^()]*)//
tx
x
/[()]/{...}
=
p
paste -d: - -
2条答案
按热度按时间b91juud31#
也许这个正则表达式就是你要找的
字符串
xuo3flqw2#
grep
是高度优化的,所以不完全 * 可编程 *。我使用sed
。字符串
这在GNU
sed
中运行得很好:型
越狱了-
-n
表示n
o打印,除非明确要求。h
表示h
在保持缓冲区中保留原始文本行,以便稍后报告。:x
声明了一个label
,用于循环返回,见下文。s/([^()]*)//
删除了最里面的 * 匹配对 * 括号。tx
循环回x
标签 *,如果进行了替换 *。/[()]/{...}
扫描这一行,看看上面是否还有括号.=
报告行号。x
将ex
更改h
eld原件的编辑行,以便p
可以p
rint它,因为它有不匹配的括号。我将它通过
paste -d: - -
传输,以便将行号和行放在输出的同一行上。我 * 认为 * 唯一特定于GNU的特性是使用分号而不是换行符,所以如果需要的话,它应该很容易适应。