書式設定された行ファイルのテキストをリンクするには:
line1
line2
...
このような結果を得る
-o line1:1 -o line2:1 ...
次のように区切り文字をリンクする方法を見つけました。
ds=`cat list.txt`
${ds//$'\n'/','}
しかし、各項目にプレフィックスを追加する方法がわかりません。
答え1
生成された文字列で何をしたいかによって異なります。これはコマンドラインオプションセットのように見えるのでutil
。
解決策は次のとおりです/bin/sh
。
#!/bin/sh
listfile=$1
set --
while IFS= read -r line; do
set -- "$@" -o "$line:1"
done <$listfile
util "$@"
これはスクリプトのコマンドラインで提供されているファイルから読み込み、そのファイルから読み取った各行に含める場所パラメータとファイル-o
から読み取った行の場所を設定しますLINE:1
。LINE
すべての行を読み取った後、util
作成されたコマンドライン引数のリストを使用して呼び出されます。二重引用符を使用して、"$@"
構成されたパラメーター・リスト内の各個々の項目が個別に引用されるようにします。
bash
配列を使用して、bash
私たちが作成したコマンドライン引数を保持します。
#!/bin/bash
listfile=$1
while IFS= read -r line; do
args+=( -o "$line:1" )
done <$listfile
util "${args[@]}"
上記の両方の例では、引用が重要です。同じ事実は、個々の項目の配列(それぞれ-o
はLINE:1
リストの項目です)。別の方法は単一文字列 -o LINE1:1 -o LINE2:1 etc.
(しかしasとして使用すると引数として解釈され、としてutil "$string"
使用するとトークン化とファイル名のグロービングが実行されるため、util $string
機能しません。)
上記の両方のスクリプトは、次のように使用されます。
$ ./script.sh file
ここではscript.sh
、実行可能なスクリプトファイル、およびfile
読み取る入力ファイルの名前です。
関連:
答え2
最近のシェル(例bash
:)を使って試してみてください。
mapfile -t TMP <file
TMP=(${TMP[@]/%/:1})
echo ${TMP[@]/#/-o }
-o line1:1 -o line2:1 -o line3:1
答え3
sed 's/\(.*\)/-o \1:1/' file.txt | xargs /path/to/command
交換方法sed
は次のとおりです。与えられた行のテキストを「-o the_original_text:1」に置き換えます。その後、コマンドxargs
は変更されたテキスト行を取得し、コマンドライン引数に合わせてリンクします。
答え4
入力ファイル:
line1
line2
line3
注文する:
perl -lpe '$\=" ";$_="-o $_:1"' input.txt
代替コマンド:
awk '{ORS=":1 ";print"-o "$0}' input.txt
出力(両方のコマンドが同じ):
-o line1:1 -o line2:1 -o line3:1