时间:2015-07-09 03:01:40

标签: shell unix

我想在文件中的行的特定位置插入一个字符串。

例如我的文件有内容

文件1:

abcd efg hi 
xxx yy   
zzccc
xx 7777  

现在在第一个字符为x的每一行中,我想在第11个位置写“na”。

文件的输出应为:

文件1:

abcd efg hi 
xxx yy    na
zzccc
xx 7777   na

有人可以帮忙吗?谢谢!

3 个答案:

答案 0 :(得分:0)

这样做:

perl -e 'while(<>){ if(/^x/){chomp; print $_." na\n";}else{print;}}' file1

将(/ ^ x /)替换为您想要的任何内容,将“na”替换为您想要的字符串。

答案 1 :(得分:0)

Bourne / Posix shell解决方案假定包含x的行在您的示例中为10个字符或更少:

$ while IFS= read -r line; do [ $(expr index "$line" x) -eq 1 ] && printf "%-10sna\n" "$line" || printf "%s\n" "$line"; done <file.txt
abcd efg hi
xxx yy    na
zzccc
xx 7777   na

简短的脚本形式是:

#!/bin/sh

while IFS= read -r line; do 
    if [ $(expr index "$line" x) -eq 1 ]; then 
        printf "%-10sna\n" "$line"
    else
        printf "%s\n" "$line"
    fi
done <file.txt

要使用上面的脚本编辑您的文件,只需使用临时文件并重定向输出:

sh script.sh <file.txt >tmp && mv -f tmp file.txt

注意:这不会检查tmp是否存在,如果存在则会覆盖它。如果您需要检查字符串的长度以确保它不超过10个字符,您可以使用$(expr length "$line")来查找每行的长度。 perl和shell表达式的另一种替代方法是sed -i来编辑文件。

答案 2 :(得分:0)

sed 's/\(^[x].*\)/\1 na/g' 1.t