【问题标题】:Is there a way to treat special characters in users input variable as literal?有没有办法将用户输入变量中的特殊字符视为文字?
【发布时间】:2019-06-06 22:43:48
【问题描述】:

了解有关 awk 的更多信息,但是我无法找到一种方法将特殊字符视为 awk ~ 模式中的文字,例如,我有一个 txt 文件,其中包含

C++ for dummies:test1:test2
java for dummies:test1:test2
bash for dummies:test1:test2

说我希望用户能够根据第一个字段搜索匹配模式,例如用户输入假人输出将是

C++ for dummies:test1:test2
java for dummies:test1:test2
bash for dummies:test1:test2

或者如果用户输入了整个字符串 C++ 的假人输出将是

C++ for dummies:test1:test2

实际输出为空白,因为它包含特殊字符

但只输入 C++ 就会产生输出

C++ for dummies:test1:test2 

黑斜线会有所帮助,但这是用户输入的意思,我不知道输入会是什么样子。

这是我写的代码

read titleInput
awk -v title="$titleInput" -F: '$1~title {print $0}' textF.txt

【问题讨论】:

    标签: awk


    【解决方案1】:

    不要使用~ 进行正则表达式匹配,而是使用index 函数,它将搜索参数视为纯字符串而不是RE:

    $ echo 'C++ for dummies:test1:test2' | awk  -F: -v title="C++ for dummies" 'index($1, title)'
    C++ for dummies:test1:test2
    

    【讨论】:

    • 是否可以使用 print{} 作为索引?因为我想为傻瓜修改输出 C++,$test1,test2
    • 是的,我只是因为{print $0}而忽略了它。是默认动作。您可以将其添加回来并根据需要进行修改。
    猜你喜欢
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多