这是input.txt的内容:
hello=123
1234
stack=(23(4))
12341234
overflow=345
=
friends=(987)
然后我试图将所有线条相等地移除外部的肠衣(如果线条有的话)。
要清楚,这是我正在寻找的结果:
hello=123
stack=23(4)
overflow=345
friends=987
我坚持这样的事情:
cat input.txt | grep -Poh '.+=(?=\()?.+(?=\))?'
但不会什么都不返回。我究竟做错了什么?你有任何想法吗?我很感兴趣。
答案 0 :(得分:1)
使用awk:
awk 'BEGIN{FS=OFS="="} NF==2 && $1!=""{gsub(/^\(|\)$/, "", $2); print}' file
hello=123
stack=23(4)
overflow=345
friends=987
答案 1 :(得分:1)
以下是sed
的另一种方式:
sed -nr ' # Use n to disable default printing and r for extended regex
/.+=.+/ { # Look for lines with key value pairs separated by =
/[(]/!ba; # If the line does not contain a paren branch out to label a
s/\(([^)]+)\)/\1/; # If the line contains a paren find a subset and print that
:a # Our label
p # print the line
}' file
$ sed -nr '/.+=.+/{/[(]/!ba;s/\(([^)]+)\)/\1/;:a;p}' file
hello=123
stack=23(4)
overflow=345
friends=987