【问题标题】:How to grep "\n" in file如何在文件中grep“\ n”
【发布时间】:2014-03-26 11:30:58
【问题描述】:

示例文件:abc.ksh

echo "This is a sample file." >> mno.txt
echo "\nThis line has new line char." >> mno.txt

我想要

echo "\nThis line has new line char." >> mno.txt

作为输出。

【问题讨论】:

  • 换行确定行尾;行中间不能有换行符。
  • 转义反斜杠:grep '\\n' abc.ksh - 不客气 :-)
  • grep -F '\n' abc.ksh 也可以,-F 告诉 grep 将模式作为固定字符串查找。
  • fgrep 只接受固定模式:fgrep \n mno.txt

标签: linux grep


【解决方案1】:

使用-F 匹配固定字符串:

$ grep -F "\n" file
echo "\nThis line has new line char." >> mno.txt

来自man grep

-F, --fixed-strings

将 PATTERN 解释为固定字符串的列表,由换行符分隔, 其中任何一个要匹配。 (-F 由 POSIX 指定。)

【讨论】:

  • @Crusader 我需要更多上下文
  • -zoP 键帮助
  • @Crusader 还是不明白你的意思,试着详细说明一下
【解决方案2】:

最简单的方法是使用正则表达式:

grep "$" filename  # this will match all lines ending with "\n" (often all lines)
grep "PATTERN$"    # this will match all lines ending with "PATTERN\n"

在 REGEX 语言中,$ 表示 EOL(行尾),因此它通常会匹配 "\n"(原因很常见为行尾)。

警告:小心使用支持 REGEX! 的 grep 版本。

【讨论】:

    【解决方案3】:

    只需用另一个反斜杠转义反斜杠并将正则表达式放在单引号中,以便 shell 将其传递给 grep 而无需处理反斜杠本身:

    grep '\\n' abc.ksh
    

    【讨论】:

    • @Samha' 你的 shell 和 grep 版本是哪个?它在 ubuntu 中对我有用
    【解决方案4】:

    正则表达式模式搜索

    grep -P '\n' mno.txt
    

    【讨论】:

    • 或其他选项grep $'\n'
    【解决方案5】:

    你可以尝试这样,用另一个反斜杠转义反斜杠:

    grep '\\n' xyz.ksh
    

    【讨论】:

      【解决方案6】:

      grep -zoP '[^\n]*\n[^\n]*' file

      • -z - 将所有 \n 更改为零字节
      • -o - 仅显示差异(因为整个文件现在是 grep 的一行)
      • -P - perl 正则表达式

      查找\n和前后行

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-10
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多