我有一个文件,我在这里搜索行尾的数字。
“尝试和信任”,小霍雷肖·阿尔杰著。1 “漫游者男孩在学校”,阿瑟·M·温菲尔德11著 “出国流浪”,第一部分,马克吐温23
如果我搜索1,我想打印第一行,其中1在行的末尾。不是有11的第二行,也不是1在句子中间的第三行。
echo "Enter the content you are searching for:"
read foo
if x=$(grep -A 1 -i "$foo\$" GUTINDEX.ALL)
then echo -e "$x"
fi$是用来检测线路末端的,但这是不起作用的。为什么?
发布于 2018-04-29 08:51:37
用awk:
$ foo=1
$ awk -v s="$foo" '$NF==s' file
Try and Trust, by Horatio Alger, Jr. 1解释:
$ awk -v s="$foo" ' # the search term in s var
$NF==s # if the last field is equal to s print the record
' file发布于 2018-04-29 08:59:16
如果您试图创建一个脚本,允许您输入regex (正则表达式)作为参数(位置参数),则只需使用以下形式即可。
grep "$2" "$1"其中"$2"是正则表达式,"$1"是文件名。您还可以根据需要为grep添加任何附加选项(例如,匹配后的一行上下文的-A 1,等等)
一个简短的例子是:
#!/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"(注意:没有必要转义'$',因为当它包含在字符串中时,它就失去了它的特殊意义-只要引用它,就不会执行扩展)。
示例使用/输出
$ bash parse.sh gutindex.all '[^0-9]1$'
Try and Trust, by Horatio Alger, Jr. 1或
$ bash parse.sh gutindex.all '23$'
A Tramp Abroad, Part 1, by Mark Twain 23有许多方法可以解决这个问题。看一看,如果你还有其他问题,请告诉我。
https://stackoverflow.com/questions/50084814
复制相似问题