我正在查看所有版本号都从第7行第18行开始的文件。
Bash在第7行读取(转换为$变量)字符串的最佳方法是什么,从列,即“字符”,18到行尾?这条线的第5个到最后一个字符怎么样?
答案 0 :(得分:1)
sed
方式:
variable=$(sed -n '7s/^.\{17\}//p' file)
编辑(感谢评论者):如果按列表示字段(用制表符或空格分隔),则命令可以更改为
variable=$(sed -n '7s/^\(\s\+\S\+\)\{17\}//p' file)
答案 1 :(得分: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)}')
答案 2 :(得分: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}"
答案 3 :(得分:0)
如果用“列”表示“字段”:
a=$( awk 'NR==7{ print $18 }' file )
如果您真的希望第7行到第7行结束,请执行:
a=$( sed -n 7p | cut -b 18- )