BASH脚本找到一个单词的句子

时间:2011-10-16 08:00:59

标签: regex bash scripting matching

将文件名作为参数,脚本读取文件名并创建一个仅包含一个单词的行的新文件。

示例输入和输出将是

There
are 20 students in the class.
[TAB][SPACE] Nearly
half of them are enrolled in FoS. The rest are in
Faculty-Of-ES.

脚本的输出应该类似于

There
[TAB][SPACE] Nearly
Faculty-Of-ES.

你好,我是一名初学程序员,我正在尝试学习bash脚本超过一个月,但这样的问题仍然让我感到困惑。 请概述一般方法。谢谢你

3 个答案:

答案 0 :(得分:2)

grep -P "^[\s]*[0-9A-Za-z-]+.?[\s]*$" test.txt

test.txt包含输入文字。

在这里,我将一个单词定义为在开头和结尾有零或更多空白。然后字母,数字和- 以及的任意组合,可选择以句点结尾。

注意:: 如果您将浮点数视为单词,则无效。因此,您对word的定义定义了结果和正则表达式。

答案 1 :(得分:1)

可能是最简单的方法:awk 'NF==1' filename

答案 2 :(得分:0)

代码cat $1 | egrep "^\s*\w+\s*$" > output.txt

<强>说明

  1. 您可以使用$1..$9引用程序获得的变量,因此如果您运行程序$ > myprogram filename.txt,则$1将为filename.txt
  2. 2.您可以使用cat filename阅读文件的内容。您可以使用|(管道符号)将文件内容传递到下一行代码。

    1. 您可以使用egrep程序仅显示正则表达式匹配的行。

    2. 只能获得一个字线的正则表达式可能是:^\s*\w+\s*$。其中读取:在行的开头可以有零个或多个空格(\ s - 空格,*为零或更多,^是行的开头)。那么一个或多个字符(\ w是字母,数字和下划线,+是一个或多个)。那么零个或多个空格然后必须是该行的结尾。这意味着这个正则表达式不会显示“某事物”这一行,因为它期望空格后面的行结束,而不是更多的单词。

    3. 您可以使用重定向将{egrep>的输出重定向到文件:> filename