当前位置: 技术问答>linux和unix
shell在文件行末尾加字符过滤空行和注释的问题
来源: 互联网 发布时间:2017-03-21
本文导语: 各位,请教大家一个问题: 一个文件,里面有注释(#注释)和空行,我要在文件的每一行末尾加上一些字符,但是注释行和空行不加。要怎么过滤? 我使用这两种办法,都可以加,但是无法得到想要的结果: awk '{p...
各位,请教大家一个问题:
一个文件,里面有注释(#注释)和空行,我要在文件的每一行末尾加上一些字符,但是注释行和空行不加。要怎么过滤?
我使用这两种办法,都可以加,但是无法得到想要的结果:
awk '{print $0,"abc"}' tt.txt > t.txt //无法过滤注释行和空行。
cat tt.txt | grep -v '^#' | grep -v '^$' | awk '{print $0,"abx"}' > t.txt//这样是过滤了,但是注释行和空行没了。
请问各位,要怎么做才达到效果:不在注释行和空行后面加,又要保留注释行和空行。
谢谢
一个文件,里面有注释(#注释)和空行,我要在文件的每一行末尾加上一些字符,但是注释行和空行不加。要怎么过滤?
我使用这两种办法,都可以加,但是无法得到想要的结果:
awk '{print $0,"abc"}' tt.txt > t.txt //无法过滤注释行和空行。
cat tt.txt | grep -v '^#' | grep -v '^$' | awk '{print $0,"abx"}' > t.txt//这样是过滤了,但是注释行和空行没了。
请问各位,要怎么做才达到效果:不在注释行和空行后面加,又要保留注释行和空行。
谢谢
|
awk的功能非常强大,只需使用这一个命令就可以实现。
awk '{if((NF != 0) && ($0 !~ /^#/)) $0 = $0" [my addition]"} {print $0}' source.txt > destination.txt
其中蓝色部分修改为需要添加的字符串。
以下内容仅是本人在尝试解决楼主需求的过程中所想到的问题,在此写出,仅作笔记。
根据楼主的需求,我还想到了一些比较特殊的情况,比如source.txt文件中的内容如下所示:
123
!@#
abc
#lksdjfklsdf
######adkj
[ ]123
[t]9089
[ ][t][ ]0987098
[t][ ][t]lkdlsjf
[ ]#dsklfsdkljfkldsjfklsdjjdfddddddddfff
[t]#777
[ ][t][ ]#999
[t][ ][t]#successful!
其中[ ]代表空格,[t]代表制表符,即有些行的行首有任意多个空格或制表符。
如果依旧使用上面的awk命令,则最后4行的行尾会添加自定义的字符串,而这四行实际上是注释,不应添加。而使用如下的awk即可达到效果(修改的部分使用蓝色加粗标记):
awk '{if((NF != 0) && ($0 !~ /^[ t]*#/)) $0 = $0" [my addition]"} {print $0}' csdn.txt > csdn1.txt
awk '{if((NF != 0) && ($0 !~ /^#/)) $0 = $0" [my addition]"} {print $0}' source.txt > destination.txt
其中蓝色部分修改为需要添加的字符串。
以下内容仅是本人在尝试解决楼主需求的过程中所想到的问题,在此写出,仅作笔记。
根据楼主的需求,我还想到了一些比较特殊的情况,比如source.txt文件中的内容如下所示:
123
!@#
abc
#lksdjfklsdf
######adkj
[ ]123
[t]9089
[ ][t][ ]0987098
[t][ ][t]lkdlsjf
[ ]#dsklfsdkljfkldsjfklsdjjdfddddddddfff
[t]#777
[ ][t][ ]#999
[t][ ][t]#successful!
其中[ ]代表空格,[t]代表制表符,即有些行的行首有任意多个空格或制表符。
如果依旧使用上面的awk命令,则最后4行的行尾会添加自定义的字符串,而这四行实际上是注释,不应添加。而使用如下的awk即可达到效果(修改的部分使用蓝色加粗标记):
awk '{if((NF != 0) && ($0 !~ /^[ t]*#/)) $0 = $0" [my addition]"} {print $0}' csdn.txt > csdn1.txt
|
经过测试,如下简单代码可行:
sed 's/(^[^#])/行首增加的字符串1/g' 文件名
sed 's/(^[^#])/行首增加的字符串1/g' 文件名
|
#!perl -w
use strict;
while(){
next if /^#!/;
next if /^s*$/;
#do something
s/$//g;
}
|
元芳,CSDN新论坛上线!你怎么看?