0

我需要使用批处理器从包含特定字符串的行中删除文本:SED、AWK、Windows 批处理、Unix shell 或类似的东西。如果字符串为“green”,则以下输入

red
green 1
blue
green 2
yellow

将产生输出

red
<EMPTY LINE>
blue
<EMPTY LINE>
yellow

我还需要对不匹配字符串的行做同样的事情,产生输出

<EMPTY LINE>
green 1
<EMPTY LINE>
green 2
<EMPTY LINE>

我需要从行中删除文本(清空行的内容),而不是删除它们。

4

4 回答 4

2

使用 sed 清空包含以下内容的行green

sed '/green/s/.*//' input

并使用 sed 清空其他行:

sed '/green/!s/.*//' input
于 2012-12-30T22:11:24.297 回答
2

Windows 命令行/批处理

使用findfindstr

输出不匹配的行

find /V "green" file.txt

输出匹配线

find "green" file.txt

这些命令会将内容输出到控制台。根据需要将输出重定向到目标文件。例子:

find /V "green" file.txt > nonmatchingoutput.txt

键入find /?findstr /?寻求帮助和所有选项。


更新更新的问题。

这将只使用 Batch 完成您要求的操作

:: Hide Commands
@echo off

:: Erase Existing Files
>match.txt ( <nul set /p "=" )
>nomatch.txt ( <nul set /p "=" )

:: Loop through Source and Generate Output
for /f "tokens=1,* delims=]" %%K in ('type temp.txt ^| find /V /N ""') do (
    for /f "delims=" %%X in ('echo(%%L ^| find /V "green"') do (
        echo(%%X>>nomatch.txt
        echo.>>match.txt
    )
    for /f "delims=" %%X in ('echo(%%L ^| find "green"') do (
        echo(%%X>>match.txt
        echo.>>nomatch.txt
    )
)
于 2012-12-30T22:52:48.067 回答
0

使用 perl:

# Empty when finding green
perl -pe 's,.*,, if /green/' inputfile
# Empty when not finding green
perl -pe 's,.*,, unless /green/' inputfile

这些命令会将内容输出到标准输出,因此将输出重定向到目标文件。

于 2012-12-30T22:02:33.303 回答
0

下面列出了 Sed 解决方案:

输入.txt

red
green 1
blue
green 2
yellow

尝试这个

代码 1:

$> grep -v green Input.txt  | sed G

或者

$> sed '!s/^green//g' Input.txt

red

blue

yellow

代码 2:

$> grep green Input.txt  | sed G

或者

$> sed -n '/green/p' Input.txt



green 1

green 2
于 2013-01-02T05:34:29.927 回答