【问题标题】:Finding a string and subsequent characters in a text file using SHELL [duplicate]使用 SHELL 在文本文件中查找字符串和后续字符 [重复]
【发布时间】:2016-05-28 13:40:12
【问题描述】:

我有一个如下格式的文本文件:

Value1=some string-1
Value2=some string-2
Value3=some string-3
Value4=some string-4
Value5=some string-5
Value6=some string-6

如果我需要找到Value6 的值并打印出some string-6,我将如何在SHELL 脚本中执行此操作?

if grep -qs "Value6" Test.txt
then
  print some string-6
fi

如何在此处打印some string-6

【问题讨论】:

    标签: string shell sed scripting


    【解决方案1】:

    简单的方法是使用grepsed。示例:

    grep Value6 file | sed -e 's/^.*[=]//'
    

    示例输入

    $ cat tmpf
    Value1=some string-1
    Value2=some string-2
    Value3=some string-3
    Value4=some string-4
    Value5=some string-5
    Value6=some string-6
    

    使用/输出

    $ grep Value6 tmpf | sed -e 's/^Value6[=]//'
    some string-6
    

    注意,您也可以在单个集合调用中执行此操作:

    $ sed -n 's/^Value6[=]//p' < tmpf
    some string-6
    

    无论您使用哪种方法,将生成的字符串保存到变量中,您都可以使用命令替换

    myvar=$(sed -n 's/^Value6[=]//p' < tmpf)
    

    或旧的(现在较少使用)反引号变体

    myvar=`sed -n 's/^Value6[=]//p' < tmpf`
    

    【讨论】:

    • sedgrep 的超集;所以这是useless use of grep
    • 另外,如果没有适当的锚定,这将不会从=Hello, this is Value6 中提取任何内容,而从Value1=not at all like Value6 中提取错误信息
    • 是的,你是对的,但是当你向刚刚学习解析的人谈论 抑制模式空间 的解决方案时,有时会让他们的眼睛翻到头上.我添加了纯 sed 解决方案。
    • 有没有办法可以将它保存到变量中?
    • 当然myvar=$(sed -n 's/^Value6[=]//p' &lt; tmpf) 就足够了。我会把它添加到答案中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 2016-07-31
    • 2015-07-14
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    相关资源
    最近更新 更多