赛德。保存以特定文件类型结尾的行
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'
其中行范围 - 可选 - 可以是行号,如 1
、5
、2-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
,是打印命令的字母。
我有一个文本文件,想保存所有以 .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'
其中行范围 - 可选 - 可以是行号,如 1
、5
、2-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
,是打印命令的字母。