Linux 中是否有任何命令可以在文件中查找文本,如果找到则将其复制到另一个文件中?
使用sed -i
我们可以找到文本,但如何将整行复制到另一个文件中?
答案1
不要使用sed -i
- 它会覆盖您的原始文件。
使用 grep 代替。
grep "text to find" input.txt > output.txt
答案2
据我了解这个问题,操作员想要找到文本并将其放入另一个文件中,而不是找到文本的整行。
我会使用grep -o 'pattern' input_file > output_file
.
旗帜-o
:
-o, --only-matching
Print only the matched (non-empty) parts of a matching line,
with each such part on a separateoutput line.
例子:
$ cat tmp
01/21/21 - foo
01/22/21 - bar
01/23/21 - foo
01/24/21 - bar
$ grep -o 'foo' tmp > foo
$ cat foo
foo
foo
答案3
sed
stdout
默认输出到。要输出到文件,请使用运算符(如果要创建新文件)或使用运算符(如果要将输出附加到已存在的文件)sed
将重定向stdout
到文件:>
>>
sed '/text/' inputfile > outputfile
sed '/text/' inputfile >> outputfile
答案4
sed -i
用于就地编辑:
从man sed
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
sed
是一个不错的选择,但你也可以使用awk
awk '/<your_pattern>/' foo > bar
例子
$ cat foo
foo bar foobar
bar foo bar
bar foo
$ awk '/foobar/' foo > bar
$ cat bar
foo bar foobar