【问题标题】:Delete a case insensitive string matched in file删除文件中匹配的不区分大小写的字符串
【发布时间】:2016-07-23 04:29:30
【问题描述】:

我正在尝试使用以下 sed 命令从文件中删除字符串:

pattern="$name;$date;$hour"
sed -i.bak "/${pattern}/I d" $BOOKFILE

但问题是: 在 OS X 上 - sed 不支持不区分大小写的匹配

我需要使用不区分大小写的方式从文件中删除一个字符串。 例如,如果我插入“a;20161010;11”而不是“A;20161010;11”,它必须识别并从文件中删除相同的字符串。

我无法使用其他语言的脚本,如 perl 或 TCL 等...

【问题讨论】:

  • 不,它不是重复的,因为我不能使用其他语言的脚本,如 perl 或 TCL 等......因为它是大学的练习
  • 恐怕sed 二进制文件不会改变以适应您的需求。您可能不得不使用 something else,或者获取支持此功能的 sed 二进制文件。
  • 使用Homebrew,安装GNU sedbrew install gnu-sed;使用gsed 调用它。
  • 如果您真的只想使用区分大小写的 sed,那么也许您可以使用 sed 使 pattern 不区分大小写,例如sed -E "s/a|A/[aA]/g" 应用于模式将使其对 a 不区分大小写。如果您只期望小写或大写而不是混合大小写,则可以只使用两种模式,每种模式一种。 HTH

标签: macos bash


【解决方案1】:

我解决了!

# Delete the line containing the pattern '$name;$date;$hour' and create/update a file.bak
pattern=$(grep -i "$name;$date;$hour" $BOOKFILE)
sed -i.bak "/${pattern}/ d" $BOOKFILE 

我使用 grep -i 命令(-i = 不区分大小写)来获取模式,然后我使用了正确模式的 sed。

【讨论】:

    猜你喜欢
    • 2014-09-07
    • 2017-12-09
    • 2018-04-28
    • 2014-10-26
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    相关资源
    最近更新 更多