如何使用awk或sed从文件名中删除字符?

如何使用awk或sed从文件名中删除字符?,sed,awk,Sed,Awk,我有1000多个像这样的文件 kkk1a2o_A.txt kkk1a73_A.txt kkk2chj_A.txt 我想更改每个文件的名称,如下所示 1a2o.txt 1a73.txt 2chj.txt 如何使用awk或sed实现这一点?sed和awk操作文件的内容,而不是文件名。您可以在循环中使用mv: for file in kkk*.txt ; do new=${file#kkk} mv "${file}" "${new%_A.txt}.txt" done 无需sed或

我有1000多个像这样的文件

kkk1a2o_A.txt
kkk1a73_A.txt
kkk2chj_A.txt
我想更改每个文件的名称,如下所示

1a2o.txt
1a73.txt
2chj.txt

如何使用awk或sed实现这一点?

sed
awk
操作文件的内容,而不是文件名。您可以在循环中使用
mv

for file in kkk*.txt ; do
    new=${file#kkk}
    mv "${file}" "${new%_A.txt}.txt"
done

无需
sed
awk
,只需
bash
参数扩展:

for f in *.txt
do
    dest=${f#kkk}
    dest=${dest%_A.txt}.txt
    mv "$f" "$dest"
done
这可能适用于您(GNU-sed):

 printf "%s\n" * | sed 'h;s/kkk\([^_]*\)_A/\1/;H;g;s/^\(.*\)\n/mv -v \1 /e'