删除shell脚本中文件中某行的第一个字符

时间:2015-03-20 07:22:15

标签: linux bash shell sed

这里我要删除某些行的文件的第一个字符。例如:

>cat file1.txt
10081551
10081599
10082234
10082259
20081134
20081159
30082232
10087721

从第3行到第7行删除第一个字符sed命令或其他任何输出将是:

>cat file1.txt
10081551
10081599
0082234
0082259
0081134
0081159
0082232
10087721

5 个答案:

答案 0 :(得分:4)

sed -i '3,7s/.//' file1.txt

sed -i.bak '3,7s/.//' file1.txt # to keep backup

3rd7th行,将第一个字符替换为空。

答案 1 :(得分:1)

这在sed中很简单:

sed -i '3,7 s/^.//'

或Perl:

perl -i -pe 's/^.// if $. >= 3 && $. <= 7'

答案 2 :(得分:1)

sed程序可以通过以下方式执行此操作:

pax$ sed '3,7s/.//' file1.txt
10081551
10081599
0082234
0082259
0081134
0081159
0082232
10087721

替换匹配.的行上的第一个字符(这是该行的第一个字符)。

我还将提供awk解决方案。这有点复杂,但值得学习,因为它允许比sed更复杂的操作。

pax$ awk 'NR>=3&&NR<=7{sub("^.","",$0)}{print}' file1.txt
10081551
10081599
0082234
0082259
0081134
0081159
0082232
10087721

答案 3 :(得分:1)

对于你的第二个问题:

  1. 如果结尾引用位于文件的最后一行:

    sed '$i\
      /home/neeraj/yocto/poky/meta-ti \\
    ' text
    
  2. 匹配续行的结尾(这个感觉很脆弱)

    sed '   
        /BBLAYERS.*"/ {
            :a
            /\\$/ {N; ba}
            s@"$@/home/neeraj/yocto/poky/meta-ti \\\n"@
        }
    ' text
    

答案 4 :(得分:0)

awk

的另一种变体
awk 'NR~/^[3-7]$/{sub(".","")}1' file
10081551
10081599
0082234
0082259
0081134
0081159
0082232
10087721