0

7 行目の 18 列目から始まるバージョン番号がすべて異なるファイルを見ています。

Bash で 7 行目の文字列を ($variable に) 読み取るための最良の方法は何ですか? 行の最後から 5 文字目まではどうでしょうか。

4

4 に答える 4

1

sed仕方:

variable=$(sed -n '7s/^.\{17\}//p' file)

EDIT(コメント者に感謝):列がフィールド(タブまたはスペースで区切られている)を意味する場合、コマンドは次のように変更できます

variable=$(sed -n '7s/^\(\s\+\S\+\)\{17\}//p' file)
于 2012-06-12T17:42:49.397 に答える
1

使用するユーティリティに応じて、さまざまな方法でこれを行うことができます。オプションの 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}"
于 2012-06-12T17:48:21.830 に答える
1

使用する

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)}')
于 2012-06-12T17:44:14.843 に答える
0

「列」が「フィールド」を意味する場合:

a=$( awk 'NR==7{ print $18 }' file )

18 バイト目から 7 行目の終わりまでが本当に必要な場合は、次のようにします。

a=$( sed -n 7p | cut -b 18- )
于 2012-06-12T17:41:13.437 に答える