【发布时间】:2014-12-23 01:24:12
【问题描述】:
我该如何做这样的事情?
"input" | \
if
grep -E 'phone_and_fax":"Phone: .* Fax:'
then
sed 's/phone_and_fax":"Phone:/|/g' | \
sed 's/ Fax:/|/g' | \
sed 's/original_license_date":"Original License Date:/|/g'
elif
grep 'phone_and_fax":"Phone: '
then
sed 's/phone_and_fax":"Phone:/|/g' | \
sed 's/original_license_date":"Original License Date:/||/g'
elif
grep ' Fax:'
then
sed 's/phone_and_fax":"Phone:/||/g' | \
sed 's/ Fax:/|/g' | \
sed 's/original_license_date":"Original License Date:/|/g'
else
sed 's/phone_and_fax":"Phone:/||/g' | \
sed 's/original_license_date":"Original License Date:/|/g'
fi | \
"continue script"
什么被替换或正在寻找什么并不重要。我想要做的是使用一些管道来处理一些文本,但是if 它使用带有正则表达式的grep 跨越某种模式,then 它需要更改它将用该特定实例替换的内容。但是grep 不应该改变管道的输出。
【问题讨论】:
-
提供一个您正在尝试做的确切示例会更有帮助,因为您问题中的示例似乎有点做作。
-
grep 和 sed 都吞下输入,你不能让它们都像这样在管道的单个段中运行。
-
grep可能根本不需要。如果s/is/IS/g与字符串is不匹配,则输入原样通过,因此您无需先检查is是否存在。 -
@TomFenech 我修好了