首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从shell脚本的每一行中获取前5个字符

从shell脚本的每一行中获取前5个字符
EN

Stack Overflow用户
提问于 2014-01-07 11:54:48
回答 8查看 61.5K关注 0票数 28

这是我的sample.txt文件,它包含以下内容

代码语言:javascript
复制
31113    70:54:D2 - a-31003
31114    70:54:D2 - b-31304
31111    4C:72:B9 - c-31303
31112    4C:72:B9 - d-31302

我必须编写shell脚本,因为我将前5个字符(例如31113)作为输入id传递给其他脚本。为此,我试过这个

代码语言:javascript
复制
#!/bin/sh
filename='sample.txt'
filelines=`cat $filename`
while read -r line
do
  id= cut -c-5 $line
  echo $id
  #code for passing id to other script file as parameter
done < "$filename"

但是它不起作用,这给我带来了错误,因为

代码语言:javascript
复制
cut: 31113: No such file or directory
cut: 70:54:D2 No such file or directory
31114
31111
31112
: No such file or directory

我该怎么做?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2014-01-07 11:58:58

如果您想以这种方式使用cut,您需要使用<<< (这里的字符串)如下:

代码语言:javascript
复制
var=$(cut -c-5 <<< "$line")

注意var=$(command)表达式的使用而不是id= cut -c-5 $line。这是将命令保存到变量中的方法。

另外,使用/bin/bash而不是/bin/sh使其工作。

我正在使用的完整代码:

代码语言:javascript
复制
#!/bin/bash

filename='sample.txt'
while read -r line
do
  id=$(cut -c-5 <<< "$line")
  echo $id
  #code for passing id to other script file as parameter
done < "$filename"
票数 36
EN

Stack Overflow用户

发布于 2014-01-07 12:11:48

嗯,这是一个单线cut -c-5 sample.txt。示例:

代码语言:javascript
复制
$ cut -c-5 sample.txt 
31113
31114
31111
31112

从那时起,您可以将其传输到任何其他脚本或命令:

代码语言:javascript
复制
$ cut -c-5 sample.txt | while read line; do echo Hello $line; done
Hello 31113
Hello 31114
Hello 31111
Hello 31112
票数 28
EN

Stack Overflow用户

发布于 2014-01-07 12:11:04

与其将echo输送到cut中,不如直接将cut的输出输送到while循环:

代码语言:javascript
复制
cut -c 1-5 sample.txt |
while read -r id; do
  echo $id
  #code for passing id to other script file as parameter
done
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20970975

复制
相关文章

相似问题

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