私は、これは、検索語が見つかった行番号と行の束になった例えばコマンドの出力をどのように配列に割り当てるのですか?
grep -n "search term" file.txt | sed 's/:.*//'
...配列にgrep
からの結果を割り当てる必要があります。
1
3
12
19
bashアレイに割り当てる最も簡単な方法は何ですか?変数に変数を代入すれば、スペースで区切られた文字列になります。
私は、これは、検索語が見つかった行番号と行の束になった例えばコマンドの出力をどのように配列に割り当てるのですか?
grep -n "search term" file.txt | sed 's/:.*//'
...配列にgrep
からの結果を割り当てる必要があります。
1
3
12
19
bashアレイに割り当てる最も簡単な方法は何ですか?変数に変数を代入すれば、スペースで区切られた文字列になります。
を使用するには、配列代入の内部でコマンド置換を使用する必要があります。
arr=($(grep -n "search term" file.txt | sed 's/:.*//'))
内側の$()はコマンドを実行し、outer()は出力を配列にします。この問題は、スペースを含むファイルでは機能しないことになります。これを処理するには、IFSを\ nに設定します。
IFS=$'\n'
arr=($(grep -n "search term" file.txt | sed 's/:.*//'))
unset IFS
あなたはまた、配列の各要素の拡張を行うことで、sedの必要性を切り出すことができます。
arr=($(grep -n "search term" file.txt))
arr=("${arr[@]%%:*}")
と、要素内の空白で大文字小文字を処理するためのものです。まさに私が探していたもの。 –
IFSのものは素晴らしいです!時間を探していた! – Drutten
これは素晴らしい、まさに私が必要なものです! –
スペースで区切られた文字列は、bashで簡単に移動できます。
# save the ouput
output=$(grep -n "search term" file.txt | sed 's/:.*//')
# iterating by for.
for x in $output; do echo $x; done;
# awk
echo $out | awk '{for(i=1;i<=NF;i++) print $i;}'
# convert to an array
ar=($out)
echo ${ar[3]} # echos 4th element
あなたはファイル名にスペースを考えている場合は、配列に出力を割り当てるにはfind . -printf "\"%p\"\n"
しかし、スペースを含むファイルでは壊れています。 – jordanm
@jordanm use 'find。 -printf "\"%p \ "\ n" ' –
ありがとう! Btw、私はあなたがセミコロンを 'for x output $ echo do x $に置いたと思います。完了; ' –
参照[この質問](http://stackoverflow.com/questions/971162/how-to-initialize-a-bash-array-with-output-pipe-from-another-command) – beerbajay
スペースで区切られた文字列は、bashで簡単に移動できます。 –
ooh ...より完全に検索してください。ありがとう。 –