赛德。保存以特定文件类型结尾的行

Sed. Save lines that are ending with specific file-type

我有一个文本文件,想保存所有以 .m2 或 .M2 结尾的行。我尝试了几种方法,包括这里

D:\filetype\core\sed.exe -n -e "s/^\(.*\)\.M2//" D:\filetype\listfile\test.txt > D:\filetype\listfile\test2.txt

但结果我只得到一个空的文本文件,所以我猜我的代码有问题。

另一种方式是

D:\filetype\core\sed.exe -n -e "^/\(.*)\/.M2\/" D:\filetype\listfile\test.txt > D:\filetype\listfile\test2.txt

但在这种情况下,我无法找到错误的来源

unknown command: `^'

如果有人能看到我的错误,谢谢。

Sed 主要用于转换文本。为什么不使用 grep 呢?

grep -i "\.m2$"

这将不区分大小写地匹配 (-i) 任何以 .m2.

结尾的行

您可以使用下面的 sed 命令:

sed -n -e '/\.[mM]2$/p' <file_name>

这将打印所有末尾有 .m2.M2 的行

现在遇到您的命令问题。您的第一个命令执行:

sed -n -e "s/^\(.*\)\.M2//"

这是一个search and replace命令,由命令中的s指示。此命令的语法为 s/search_text/replace_text/。现在,如果您仔细查看您的命令,您正在搜索某些内容并将其替换为 nothing - 如命令中最后一个 // 所示 - 其中缺少 replace_text

你的第二个命令可以

sed -n -e "^/\(.*)\/.M2\/"

这是不正确的语法。 sed 命令的一般语法是:

sed -e 'line_range command'

其中行范围 - 可选 - 可以是行号,如 152-5 或正则表达式像 /[gG]//[gG][iIuU]rl/。 如果缺少 line_range,则 sed 命令中的第一个字母应该是一个命令。在您的情况下:缺少 line_range - 这在语法上很好 - 但是第一个字母是 ^ - 这是 而不是 sed 命令 - 因此您收到语法错误。

我建议的命令是

sed -n -e '/\.[mM]2$/p'

这里,line_range是正则表达式/\.[mM]2$/——表示"any line which has .m2 or .M2 at the end",command是p,是打印命令的字母。