【发布时间】:2018-04-05 20:31:40
【问题描述】:
我有一个包含数百个带有数字的 .txt 文件的文件夹。这些文件以 word1_word2_word3_word4.txt 格式命名。每个 .txt 文件的单词都不同。
我想根据文件名为每个文本文件添加一个标题,这样标题的格式为:
'>c_word1_word2'
有没有办法使用命令行或 bash 脚本对所有 .txt 文件执行此操作?
【问题讨论】:
标签: bash shell unix command-line
我有一个包含数百个带有数字的 .txt 文件的文件夹。这些文件以 word1_word2_word3_word4.txt 格式命名。每个 .txt 文件的单词都不同。
我想根据文件名为每个文本文件添加一个标题,这样标题的格式为:
'>c_word1_word2'
有没有办法使用命令行或 bash 脚本对所有 .txt 文件执行此操作?
【问题讨论】:
标签: bash shell unix command-line
在bash 和sed 中使用这个,使用一些parameter expansion builtins:
for i in *.txt; do j="${i%_*}"; sed "1i >c_${j%_*}" "$i"; done
$ ls -1
word1_word2_word3_word4.txt
word2_word2_word3_word4.txt
word3_word2_word3_word4.txt
$ cat word1_word2_word3_word4.txt
foo
bar
base
$ for i in *.txt; do j="${i%_*}"; sed -i "1i >c_${j%_*}" $i; done
$ cat word1_word2_word3_word4.txt
>c_word1_word2
foo
bar
base
$
【讨论】:
这只是 Gilles 答案的替代方法,使用正则表达式
for f in *.txt; do
if [[ $f =~ ^([^_]+_[^_]+) ]]; then
sed -i "1i>c_${BASH_REMATCH[1]}" "$f"
fi
done
【讨论】: