在文件中搜索字符串的一部分

时间:2014-01-21 17:59:04

标签: string bash shell search scripting

假设我有一个变量$ str1

str1="20140121-21:48:26|Joanne Frances|"

我想要做的是在文件中搜索该部分。该文件包含,例如:

20140121-21:48:26|Joanne Frances|Perez|9173046751.000000|Mar 31|
20140121-21:50:28|Nikko|Real|9065887272.000000|Mar 21|
20140121-22:22:53|Czarina|Revilla|9999999999.000000|Jan 21|

输出应为:

20140121-21:48:26|Joanne Frances|Perez|9173046751.000000|Mar 31|

我不知道这是否重要,但这是我使用的实际代码片段:

selected=$(yad --title=Contacts --width=200 --height=200 \
               --button=DISPLAY:2 --list \
               --separator="|" --column=ID:NUM --column=List \
               "${items[@]}" --hide-column=1 --button=ADD:10 )
req=$?

#BUTTON HANDLER:
if [ $req = 10 ]; then
    formdata=$(yad --title="Add Contact"   \
    --form --field="FIRST NAME" --separator="|"   \
     --field="LAST NAME"   \
     --field="CONTACT #:NUM"   \
     --field="Birthday (Mon Day):DT"  --date-format="%b %d" \
     "" "" "!09000000000..09999999999!11."
    )

        echo "$contactid|$formdata" >> contactlist.txt

elif [ $req = 2 ]; then
    grep "$selected" contactlist.txt #This is my problem

fi

并且它不会输出任何内容

更新: 最后知道问题是echo $selected尝试的问题,它输出20140121|Adrian Perez|意味着它真的不在文件中。 HAAA!我好像一团糟! -_-

3 个答案:

答案 0 :(得分:0)

使用grep

此处的使用详情:http://unixhelp.ed.ac.uk/CGI/man-cgi?grep 或检查手册页运行>男人从外壳grep

假设您的数据位于名为test_file.txt

的文件中的示例
grep "20140121-21:48:26|Joanne Frances|" test_file.txt

答案 1 :(得分:0)

您熟悉grep吗?它是专门为此目的而设计的工具,也非常强大。

为您提供最基本用法的简单介绍:grep <pattern> <file>(如果您坚持使用管道,则为cat <file> | grep <pattern>)。在您的示例中,grep "20140121-21:48:26|Joanne Frances|" foo假设foo是文件的名称。这产生了你想要的 - 包含模式的一行。

答案 2 :(得分:0)

适合我:

$ cat contactlist.txt 
20140121-21:48:26|Joanne Frances|Perez|9173046751.000000|Mar 31|
20140121-21:50:28|Nikko|Real|9065887272.000000|Mar 21|
20140121-22:22:53|Czarina|Revilla|9999999999.000000|Jan 21|
$ echo $str1
20140121-21:48:26|Joanne Frances|
$ grep "$str1" contactlist.txt 
20140121-21:48:26|Joanne Frances|Perez|9173046751.000000|Mar 31|
$