Jar*_*Rym 5 unix bash grep cut
我有一个名为db.txt的文本文件.文件中的一些示例行如下:
哈利波特和魔法石:JK罗琳:21.95:100:200
哈利波特和密室:JK罗琳:21.95:150:300
指环王,戒指团契:JRR Tolkien:32.00:500:500
权力的游戏:George RR Martin:44.50:300:250
然后在我的脚本中,我有以下几行:
echo "Enter title:"
read TITLE
cut -d ":" -f 1 db.txt | grep -iw "$TITLE" | while read LINE
do
STRING="`echo $LINE | cut -d ":" -f 1`,"
STRING="$STRING `echo $LINE | cut -d ":" -f 2`, "
STRING=" \$$STRING`echo $LINE | cut -d ":" -f 3`,"
STRING=" $STRING`echo $LINE | cut -d ":" -f 4`,"
STRING=" $STRING`echo $LINE | cut -d ":" -f 5`"
done
Run Code Online (Sandbox Code Playgroud)
有没有办法从剪切中获取特定字段然后将整行传递到while循环?
例如,如果我输入"哈利波特",它应该显示:
哈利波特和魔法石,JK罗琳,21.95美元,100,200美元
哈利波特和密室,JK罗琳,21.95美元,150美元,300美元
如果你cut没有grep使用bash的正则表达式匹配(或者可以使用shell模式匹配),你可以在没有的情况下执行此操作.
我们的想法是逐行读取文件,然后将该行拆分为一个数组.完成后,进行所需的比较和输出.
这是该技术的演示:
#! /bin/bash
echo "Title:"
read title
# shopt -s nocasematch # if you want case-insensitive matching
while read line ; do # this read takes data from input.txt, see
# end of loop
IFS=: read -a parts <<< "$line" # this splits the line on ":" into
# an array called parts
if [[ ${parts[0]} =~ $title ]] ; then # regex matching
printf "%s -- %s\n" "${parts[1]}" "${parts[2]}"
fi
done < input.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3884 次 |
| 最近记录: |