【问题标题】:Removing bullet point characters from text file with sed使用 sed 从文本文件中删除项目符号点字符
【发布时间】:2018-06-15 10:33:12
【问题描述】:

我有一个大文本文件,其中一些行以项目符号 (•) 开头。我想删除那些。我试过了

sed 's/\u2022//g' filename.txt

但这与项目符号不符。我也尝试将项目符号粘贴到我的 sed 命令中,但也没有成功。

E: 的输出

sed --version

sed (GNU sed) 4.2.2

E2:如果它有助于弄清楚如何捕获项目符号字符,它们最初是在 Access 中添加的。

E3:正如 cmets 中所建议的,

echo -n '•' | hexdump -C

返回

00000000  95                                                |.|
00000001

【问题讨论】:

  • 你可以试试这样的:sed "s/$(echo -ne '\u2022')//g" file1,从这里:unix.stackexchange.com/questions/196780/…
  • 你能像在 sed 上一样简单地复制和粘贴项目符号吗?这在过去对我有用。
  • echo "abc•xyz" | sed 's/•//g'?
  • @MatiasBarrios 我尝试直接从文件中复制和粘贴项目符号,但它也不能以这种方式捕获它们。
  • @Cyrus sed 's/\x95//g' 解决了我的问题。非常感谢!

标签: regex bash sed


【解决方案1】:

我建议使用 GNU sed:

sed 's/\x95//g' file

【讨论】:

    【解决方案2】:

    看起来sed 不理解\u 序列。 根据用户手册,它应该与 POSIX.2 BRE 兼容,我认为它应该可以工作,但事实并非如此。

    您可以尝试捕获十六进制序列(我使用hexdump -C 得到的)。

    sed  's/^\xe2\x80\xa2//g' filename.txt
    

    或者,您也可以强制bash 解析它。只需在字符串前添加$

    sed $'s/\u2022//g' filename.txt
    

    【讨论】:

      【解决方案3】:

      这对我来说是一个有效的命令:

      # Force paste the bullet into the command line
      sed 's/^•//g' filename.txt
      

      如果不起作用,请尝试使用 echo 转义:

      sed 's/^'"$(echo -ne '\u2022')"'//g' filename.txt
      

      作为PesaThe suggests,你也可以使用printf进行转义:

      sed 's/^'"$(printf '\u2022')"'//g' filename.txt
      

      【讨论】:

      • printf '\u2022' 可能是首选。
      • @Pesa我一直在使用echo -ne
      • 这是一个可移植性问题 - echo -ne 会在不同的盒子上做不同的事情,而 printf 在任何地方的行为都是一样的。
      猜你喜欢
      • 1970-01-01
      • 2013-10-24
      • 2011-04-01
      • 2018-04-20
      • 2021-07-02
      • 1970-01-01
      • 2013-11-19
      • 2017-11-10
      相关资源
      最近更新 更多