删除shell

时间:2017-09-05 07:54:54

标签: bash shell perl awk sed

我需要删除,(之间的多条线,包括第一次出现时的模式。

示例

Test ,

 this 

is the 
deletion 
part 
(
done...

预期输出

Test 
done

我已尝试使用sed实现以上输出,但它只返回整个文件数据。

sed 's/,*(//' file

提前致谢。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

使用sed:

sed '/Test/,/done/{//!d;s/ ,$//}' file

/Test/,/done/:从匹配Test的行到下一行匹配done

  • //!d删除除地址匹配的所有行(Test ,done
  • s/ ,$//从地址
  • 中删除第一次出现,

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed -z 's/,[^(]*(//g' file

将整个文件粘贴到内存中,全局替换,(之间的所有字符。

答案 3 :(得分:0)

awk '{sub(/ ,|\.../,"")}NR==1;END{print}' file

Test
done