我需要使用批处理器从包含特定字符串的行中删除文本:SED,AWK,Windows批处理,Unix shell或类似的东西。 如果字符串是“绿色”,则输入以下内容
red
green 1
blue
green 2
yellow
将产生输出
red
<EMPTY LINE>
blue
<EMPTY LINE>
yellow
我还需要为不匹配字符串的行做同样的事情,产生输出
<EMPTY LINE>
green 1
<EMPTY LINE>
green 2
<EMPTY LINE>
我需要从行中删除文本(清空行的内容),而不是删除它们。
答案 0 :(得分:2)
使用sed清空包含green
的行:
sed '/green/s/.*//' input
使用sed清空其他行:
sed '/green/!s/.*//' input
答案 1 :(得分:2)
Windows命令行/批处理
输出非匹配线
find /V "green" file.txt
输出匹配行
find "green" file.txt
这些命令会将内容输出到控制台。根据需要将输出重定向到目标文件。例如:
find /V "green" file.txt > nonmatchingoutput.txt
输入find /?
或findstr /?
以获取帮助和所有选项。
更新以获取更新的问题。
只需使用批处理
即可执行此操作:: 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
)
)
答案 2 :(得分:0)
使用perl:
# Empty when finding green
perl -pe 's,.*,, if /green/' inputfile
# Empty when not finding green
perl -pe 's,.*,, unless /green/' inputfile
这些命令会将内容输出到stdout,因此将输出重定向到目标文件。
答案 3 :(得分: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