首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用grep在shell脚本中查找行尾的字符串

如何使用grep在shell脚本中查找行尾的字符串
EN

Stack Overflow用户
提问于 2018-04-29 08:42:30
回答 2查看 144关注 0票数 0

我有一个文件,我在这里搜索行尾的数字。

“尝试和信任”,小霍雷肖·阿尔杰著。1 “漫游者男孩在学校”,阿瑟·M·温菲尔德11著 “出国流浪”,第一部分,马克吐温23

如果我搜索1,我想打印第一行,其中1在行的末尾。不是有11的第二行,也不是1在句子中间的第三行。

代码语言:javascript
复制
echo "Enter the content you are searching for:"  
    read foo

if x=$(grep -A 1 -i "$foo\$" GUTINDEX.ALL)
    then echo -e "$x"
fi

$是用来检测线路末端的,但这是不起作用的。为什么?

EN

回答 2

Stack Overflow用户

发布于 2018-04-29 08:51:37

用awk:

代码语言:javascript
复制
$ foo=1
$ awk -v s="$foo" '$NF==s' file
Try and Trust, by Horatio Alger, Jr. 1

解释:

代码语言:javascript
复制
$ awk -v s="$foo" '  # the search term in s var
$NF==s               # if the last field is equal to s print the record
' file
票数 1
EN

Stack Overflow用户

发布于 2018-04-29 08:59:16

如果您试图创建一个脚本,允许您输入regex (正则表达式)作为参数(位置参数),则只需使用以下形式即可。

代码语言:javascript
复制
grep "$2" "$1"

其中"$2"是正则表达式,"$1"是文件名。您还可以根据需要为grep添加任何附加选项(例如,匹配后的一行上下文的-A 1,等等)

一个简短的例子是:

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

[ -z "$1" -o -z "$2" ] && {
    printf "error: insufficient input.\n"
    printf "usage: %s filename regex\n" "${0##*/}"
    exit 1
}

[ -r "$1" ] || {
    printf "error: file not readable '%s'\n" "$1"
    exit 2
}

grep "$2" "$1"

(注意:没有必要转义'$',因为当它包含在字符串中时,它就失去了它的特殊意义-只要引用它,就不会执行扩展)。

示例使用/输出

代码语言:javascript
复制
$ bash parse.sh gutindex.all '[^0-9]1$'
Try and Trust, by Horatio Alger, Jr. 1

代码语言:javascript
复制
$ bash parse.sh gutindex.all '23$'
A Tramp Abroad, Part 1, by Mark Twain 23

有许多方法可以解决这个问题。看一看,如果你还有其他问题,请告诉我。

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

https://stackoverflow.com/questions/50084814

复制
相关文章

相似问题

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