首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在shell脚本中从文件中选择特定的单词

在shell脚本中从文件中选择特定的单词
EN

Stack Overflow用户
提问于 2013-02-18 19:25:52
回答 2查看 1.6K关注 0票数 0

我有一个文本文件,其结构如下:

代码语言:javascript
复制
....

"/home/letizia/Documents/SpanishSegmentation/Recordings/segmented/mfc/F001.0.rec"
COGE
LAS
HOJAS
Y
LAS
QUEMAS
TODAS
EN
EL
FUEGO
"/home/letizia/Documents/SpanishSegmentation/Recordings/segmented/mfc/F002.0.rec"
LA
LIGA
DE
PAZ
SE
REUNIO314201
PARA
TRATAR
EL
TEMA
....

我想选择"F0001.0“和"F0002.0”。

我正在使用:

代码语言:javascript
复制
     ID="F"
     if [[ "$LINE" == *Recordings* ]]
     then        
     SEGMENT=`echo $LINE | grep -o $ID.* | cut -d'.' -f1-2`
     fi

但它不起作用。错误在哪里?

非常提前感谢您。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-18 20:37:19

您需要一个while循环:

代码语言:javascript
复制
while IFS= read -r line; do
    id="F"
    if [[ "$line" =~ /Recordings/ ]]; then

        segment=$(echo $line | grep -o "$id.*" | cut -d '.' -f1-2)
        echo "$segment"
    fi
done < file.txt

结果:

代码语言:javascript
复制
F001.0
F002.0

但是,更好的方法是使用sed

代码语言:javascript
复制
sed -n '/Recordings/s#.*/\(F[^\.]*\.[^\.]*\).*#\1#p' file.txt
票数 1
EN

Stack Overflow用户

发布于 2013-02-18 19:48:11

尝试使用sed

代码语言:javascript
复制
sed -n 's@^".*/Recordings/.*/\(.*\)"$@\1@p' file.txt

快速演练:

  1. -n:不会打印任何内容,除非有特别要求(根据最终p).
  2. s@:的要求,在that.
  3. ^".*/Recordings/.*/\(.*\)"$:之后的部分匹配以双引号开头和结尾、包含//的行,并在最后一个slash.
  4. \1:之前将匹配的字符串替换为最后一个部分(在parentheses).

中捕获)之前,请将匹配的字符串替换为下一个@之前的部分

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14935165

复制
相关文章

相似问题

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