7 行目の 18 列目から始まるバージョン番号がすべて異なるファイルを見ています。
Bash で 7 行目の文字列を ($variable に) 読み取るための最良の方法は何ですか? 行の最後から 5 文字目まではどうでしょうか。
sed
仕方:
variable=$(sed -n '7s/^.\{17\}//p' file)
EDIT(コメント者に感謝):列がフィールド(タブまたはスペースで区切られている)を意味する場合、コマンドは次のように変更できます
variable=$(sed -n '7s/^\(\s\+\S\+\)\{17\}//p' file)
使用するユーティリティに応じて、さまざまな方法でこれを行うことができます。オプションの 1 つは、次のいずれかの方法で Bash の部分文字列展開を利用することです。
line=1
string=$(sed -n "${line}p" /etc/passwd)
echo "${string:17}"
line=1
string=$(awk "NR==${line} {print}; {next}" /etc/passwd)
echo "${string:17}"
line=1
string=`{ head -n $line | tail -n1; } < /etc/passwd`
echo "${string:17}"
使用する
var=$(head -n 17 filename | tail -n 1 | cut -f 18-)
また
var=$(awk 'NR == 17' {delim = ""; for (i = 18; i <= NF; i++) {printf "%s%s", delim, $i; delim = OFS}; printf "\n"}')
「フィールド」ではなく「文字」を意味する場合:
var=$(head -n 17 filename | tail -n 1 | cut -c 18-)
また
var=$(awk 'NR == 17' {print substr($0, 18)}')
「列」が「フィールド」を意味する場合:
a=$( awk 'NR==7{ print $18 }' file )
18 バイト目から 7 行目の終わりまでが本当に必要な場合は、次のようにします。
a=$( sed -n 7p | cut -b 18- )