在日志文件中,我想截断所有以模式开头的行" IMPRESSION DE LA TABLE"到40个字符。我怎么能这样做?
例如,如果file.log包含以下行:
IMPRESSION DE LA TABLE A.B.C 12345
^ 40th character
然后我想保留:
IMPRESSION DE LA TABLE A.B.C
我绝对需要保留表格的名称(在我的例子中为A.B.C)。
使用sed我可以删除模式后面的内容,但我不能保留其他字符:
sed 's/ IMPRESSION DE LA TABLE.*/ IMPRESSION DE LA TABLE/g' file.log
答案 0 :(得分:3)
使用GNU sed,使用反向引用:
sed '/^\s*IMPRESSION DE LA TABLE/s/^\(.\{40\}\).*/\1/' file
/^\s*IMPRESSION DE LA TABLE/
:当行以零或更多空格开头,后跟IMPRESSION DE LA TABLE
s/^\(.\{40\}\).*/\1/
:捕获40个第一个字符,并使用\1
输出。答案 1 :(得分:0)
只需使用awk:
$ awk '/ IMPRESSION DE LA TABLE/{print substr($0,1,40)}' file
IMPRESSION DE LA TABLE A.B.C
这适用于任何UNIX系统上任何shell中的任何awk,如果你的文本可以包含regexp元字符,那么很容易调整它来使用字符串函数而不是regexp:
$ awk 'index($0," IMPRESSION DE LA TABLE")==1{print substr($0,1,40)}' file
IMPRESSION DE LA TABLE A.B.C