首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否打印文件特定行中的列?

是否打印文件特定行中的列?
EN

Stack Overflow用户
提问于 2012-06-13 01:37:48
回答 4查看 1.9K关注 0票数 0

我正在查看所有具有不同版本号的文件,这些版本号从第7行的第18列开始。

使用Bash从列“$variable”18到行尾读取第7行的字符串(到字符)的最佳方式是什么?这行的倒数第五个字符是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-13 01:42:49

sed方式:

代码语言:javascript
复制
variable=$(sed -n '7s/^.\{17\}//p' file)

编辑(感谢评论者):如果您所说的列是指字段(用制表符或空格分隔),则可以将命令更改为

代码语言:javascript
复制
variable=$(sed -n '7s/^\(\s\+\S\+\)\{17\}//p' file)
票数 1
EN

Stack Overflow用户

发布于 2012-06-13 01:44:15

使用

代码语言:javascript
复制
var=$(head -n 17 filename | tail -n 1 | cut -f 18-)

代码语言:javascript
复制
var=$(awk 'NR == 17' {delim = ""; for (i = 18; i <= NF; i++) {printf "%s%s", delim, $i; delim = OFS}; printf "\n"}')

如果你指的是“字符”而不是“字段”:

代码语言:javascript
复制
var=$(head -n 17 filename | tail -n 1 | cut -c 18-)

代码语言:javascript
复制
var=$(awk 'NR == 17' {print substr($0, 18)}')
票数 1
EN

Stack Overflow用户

发布于 2012-06-13 01:48:22

根据您要使用的实用程序,您可以使用多种不同的方法来实现此目的。您的一个选择是以以下任何一种方式使用Bash的子字符串扩展:

sed

代码语言:javascript
复制
line=1
string=$(sed -n "${line}p" /etc/passwd)
echo "${string:17}"

awk

代码语言:javascript
复制
line=1
string=$(awk "NR==${line} {print}; {next}" /etc/passwd)
echo "${string:17}"

核心实用程序

代码语言:javascript
复制
line=1
string=`{ head -n $line | tail -n1; } < /etc/passwd`
echo "${string:17}"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11001865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档