Shell 在行的特定位置插入字符串

Shell 在行的特定位置插入字符串,shell,unix,Shell,Unix,我想在文件行的特定位置插入一个字符串 例如,我的文件包含内容 文件1: abcd efg hi xxx yy zzccc xx 7777 abcd efg hi xxx yy na zzccc xx 7777 na 现在,在第一个字符是x的每一行中,我想在第11个位置写上“na” 文件的输出应为: 文件1: abcd efg hi xxx yy zzccc xx 7777 abcd efg hi xxx yy na zzccc xx 7777

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

例如,我的文件包含内容

文件1:

abcd efg hi 
xxx yy   
zzccc
xx 7777  
abcd efg hi 
xxx yy    na
zzccc
xx 7777   na
现在,在第一个字符是x的每一行中,我想在第11个位置写上“na”

文件的输出应为:

文件1:

abcd efg hi 
xxx yy   
zzccc
xx 7777  
abcd efg hi 
xxx yy    na
zzccc
xx 7777   na
有人能帮忙吗?谢谢大家!

这样做:

perl-e'while(){if(/^x/){chomp;print$\..na\n”}else{print;}文件1



将(/^x/)替换为所需内容,将“na”替换为所需字符串

在您的示例中,假设包含
x
的行小于等于10个字符的Bourne/Posix shell解决方案是:

$ 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

$while IFS=read-r行;do[$(expr index“$line”x)-eq 1]&printf“%-10sna\n”“$line”| printf“%s\n”“$line”;已完成
sed的/\(^[x].\)/\1 na/g'1.t

到目前为止您有什么?发布后问题文件被修改。第一个“xxx”是第二行的开始,下一个“xx”是第四行的开始。您使用的编程语言是什么?很抱歉,添加第11个pos条件更新了
sed's/\(^[x].*\/\1/g'file.t|sed's/\(^[x].{0,9\}.*/\1na/g'
,我认为这将从更多的解释中受益。