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

时间:2012-09-17 19:19:48

标签: sed awk

我有超过1000个看起来像这样的文件。

kkk1a2o_A.txt
kkk1a73_A.txt
kkk2chj_A.txt

我想更改每个文件的名称,如下所示

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

如何使用awk或sed执行此操作?

3 个答案:

答案 0 :(得分:1)

sedawk对文件内容进行操作,而不是对其名称进行操作。您可以在循环中使用mv

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

答案 1 :(得分:0)

无需sedawk,只需bash参数扩展:

for f in *.txt
do
    dest=${f#kkk}
    dest=${dest%_A.txt}.txt
    mv "$f" "$dest"
done

答案 2 :(得分:0)

这可能适合你(GNU sed):

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