我需要删除,
和(
之间的多条线,包括图案以及第一次出现时的两条线。删除壳中两个图案之间的线
例
Test ,
this
is the
deletion
part
(
done...
期望输出
Test
done
我已经尝试了以下使用sed来实现上述输出,但它只是返回整个文件数据。
sed 's/,*(//' file
在此先感谢。
我需要删除,
和(
之间的多条线,包括图案以及第一次出现时的两条线。删除壳中两个图案之间的线
例
Test ,
this
is the
deletion
part
(
done...
期望输出
Test
done
我已经尝试了以下使用sed来实现上述输出,但它只是返回整个文件数据。
sed 's/,*(//' file
在此先感谢。
awk
更适合在这里:
awk '/,/{p=1; sub(/[ \t]*,.*/, ""); print} !p; /\(/{p=0}' file
Test
done
另外,您还可以使用perl
:
perl -i -0777 -pe 's/\h*,.*\(//s' file
或者这个表达式用否定字符类,不要求s
修改:
perl -i -0777 -pe 's/\h*,[^(]*\(//' file
'[\ s \ S]'nice':-)' –
其他选项是使用's'修饰符,如''s〜 (?s)。* \(~~'' – anubhava
perl更经常使用修饰符以外的正则表达式/...// s' –
这可能为你工作(GNU SED):
sed -z 's/,[^(]*(//g' file
啜食整个文件到内存和全局替换,
和(
什么也没有之间的任何字符。
awk '{sub(/ ,|\.../,"")}NR==1;END{print}' file
Test
done
这不符合OP的要求 - 它应该从“,”中删除,直到“(”(也可以稍微解释一下它的工作原理!) – psmears
请解释你的代码(你打算工作的方式,而不是它的工作方式),它似乎与你描述的目标非常无关,这使得问题变得模糊不清。 – Yunnosch
@Yunnosch我提供了一个例子,说明我打算如何使用代码:) –