【问题标题】:Grep while excluding special letters like umlauts排除特殊字母(如变音符号)时的 Grep
【发布时间】:2017-06-18 23:37:50
【问题描述】:

我正在运行 Mint Xfce 并尝试使用以下命令从终端进行 grep:

grep -E -o '^[A-Za-z]{1,}\s[A-Za-z]{1,}\s[0-9]{1,}' sourcefile.txt | sort -f > newfile.txt

源文件是一个文本文件,其中每一行看起来像

<string><space><string><tab><number><tab><number><tab>...

其中字符串包含字母、数字、标点符号和特殊字符,并且数字是整数。

我的目标是提取两个字符串和第一个数字只包含字符串仅包含英文字母的行(a-z,大写或小写)。

上面的命令省略了带有标点符号和数字的字符串,但是字符串中带有特殊字母(如 u umlauts (Ü))的行会以某种方式通过并被发送到 newfile.txt。我觉得我遗漏了一些明显的东西,但是大量的谷歌搜索只会让我回过头来讨论如何 grep 查找特殊字母。我在https://regex101.com/ 测试了正则表达式,但变音符号不匹配,这让我认为问题不在于我的正则表达式。

感谢您提供的任何帮助!

【问题讨论】:

    标签: regex bash grep diacritics


    【解决方案1】:

    您必须临时更改语言环境。 试试:

    LC_ALL="C" grep -E -o '^[A-Za-z]{1,}\s[A-Za-z]{1,}\s[0-9]{1,}' sourcefile.txt | sort -f > newfile.txt
    

    它在 Ubuntu 上对我有用。 要切换回您的区域设置,只需关闭控制台窗口。

    【讨论】:

    • 谢谢!我不明白为什么第一种方法不起作用,但现在起作用了。
    • 在一个新的控制台窗口中,如果你输入echo $LC_NAME,你不会看到C作为输出,但是,我敢打赌,你的语言偏好和UTF-8。 LC_ALL 临时覆盖 LC_* 变量。
    猜你喜欢
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 2011-04-06
    • 1970-01-01
    相关资源
    最近更新 更多