我想在文件中的行的特定位置插入一个字符串。
例如我的文件有内容
文件1:
abcd efg hi
xxx yy
zzccc
xx 7777
现在在第一个字符为x的每一行中,我想在第11个位置写“na”。
文件的输出应为:
文件1:
abcd efg hi
xxx yy na
zzccc
xx 7777 na
有人可以帮忙吗?谢谢!
答案 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