这里我要删除某些行的文件的第一个字符。例如:
>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
答案 0 :(得分:4)
sed -i '3,7s/.//' file1.txt
sed -i.bak '3,7s/.//' file1.txt # to keep backup
从3rd
到7th
行,将第一个字符替换为空。
答案 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)
对于你的第二个问题:
如果结尾引用位于文件的最后一行:
sed '$i\
/home/neeraj/yocto/poky/meta-ti \\
' text
匹配续行的结尾(这个感觉很脆弱)
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