>假设我有一个变量 $str 1
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|
我不知道这是否重要,但这是我正在使用 yad 的实际代码片段:
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|
这意味着它真的不在文件中。哈哈!我真是一团糟!-_-
你熟悉grep
吗?它是专门为此类目的而设计的工具,并且功能强大。
为您提供最基本的用法的简单介绍:grep <pattern> <file>
(如果您坚持使用管道,则cat <file> | grep <pattern>
)。在您的示例中,假设foo
是文件名,这将grep "20140121-21:48:26|Joanne Frances|" foo
。这完全可以生成您想要的 - 一条包含模式的线。
使用 grep
有关使用的详细信息,请参阅此处:http://unixhelp.ed.ac.uk/CGI/man-cgi?grep 或者检查手册页运行> man grep 从 shell
假设您的数据位于名为 test_file.txt 的文件中的示例
grep "20140121-21:48:26|Joanne Frances|" test_file.txt
对我有用:
$ 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|
$