テキストファイルの単語をコマンドに挿入する

テキストファイルの単語をコマンドに挿入する

1行に1単語ずつ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新しいコンテンツをstdoutとして印刷し、元のコンテンツが必要な場合は削除します。文書触れていない。

答え2

perlまたは でほぼ同じ構文を使用して、この操作を簡単に実行できます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のキャプチャは$0Perl(5)ではなく1から始まります。上記のコードでは、(.+)拡張子の前に少なくとも1つの文字が必要です\.txtalnumRaku代替演算子の左半分のすべての非文字は、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

https://raku.org

関連情報