我有一个文本文件,其中包含 100 多个单词的列表,每行一个单词:
Oliver.txt
Jack.txt
Noah.txt
Leo.txt
William.txt
我想将文本文件内容转换为
gallery-dl -g -i Oliver.txt > OliverX.txt
gallery-dl -g -i Jack.txt > JackX.txt
所有单词依此类推。我怎样才能做到这一点?
答案1
在 GNU awk 中:
awk -i inplace -v FS="." '{print "gallery-dl -g -i " $1 ".txt > " $1 "X.txt"}' FILE
它将替换的内容文件与新的内容。-i inplace
如果您想将新内容打印到标准输出并拥有原始内容,请删除文件完好无损的。
答案2
perl
您可以使用or中几乎相同的语法轻松完成此操作sed
:
sed
:
$ sed -E 's/(.*).txt/gallery-dl -g -i \1.txt > \1X.txt/' file
gallery-dl -g -i Oliver.txt > OliverX.txt
gallery-dl -g -i Jack.txt > JackX.txt
gallery-dl -g -i Noah.txt > NoahX.txt
gallery-dl -g -i Leo.txt > LeoX.txt
gallery-dl -g -i William.txt > WilliamX.txt
perl
:
$ perl -pe 's/(.*).txt/gallery-dl -g -i \1.txt > \1X.txt/' file
gallery-dl -g -i Oliver.txt > OliverX.txt
gallery-dl -g -i Jack.txt > JackX.txt
gallery-dl -g -i Noah.txt > NoahX.txt
gallery-dl -g -i Leo.txt > LeoX.txt
gallery-dl -g -i William.txt > WilliamX.txt
答案3
使用乐(以前称为 Perl_6)
raku -pe 's/ ^ (.+) \.txt $ /gallery-dl -g -i $0.txt > $0X.txt/;'
与 @terdon 的 Perl(5) 代码类似,Raku 的捕获从$0
1 开始,而不是像 Perl(5) 中那样。上面的代码(.+)
要求扩展名前至少有一个字符\.txt
。alnum
Raku 替换运算符左半部分中的所有非字符s///
必须转义才能被理解为文字(例如\.txt
)。最后,Raku 替换运算符的左半部分s///
默认是允许空格的。
输入示例:
Oliver.txt
Jack.txt
Noah.txt
Leo.txt
William.txt
示例输出:
gallery-dl -g -i Oliver.txt > OliverX.txt
gallery-dl -g -i Jack.txt > JackX.txt
gallery-dl -g -i Noah.txt > NoahX.txt
gallery-dl -g -i Leo.txt > LeoX.txt
gallery-dl -g -i William.txt > WilliamX.txt