【问题标题】:how to copy all strings that contain a specific character , and past them in another file如何复制所有包含特定字符的字符串,并将它们粘贴到另一个文件中
【发布时间】:2019-06-07 21:52:16
【问题描述】:

我正在尝试从文本文件中提取包含特定字符的单词并将所有这些单词复制到另一个文件示例中

文件 1

[
hello
292
292988
HI22
Hi2
118
HEYTHERE
]

我想复制包含字符'2'的单词

文件结果

[ 292 
292988
HI22
Hi2]

【问题讨论】:

  • 欢迎来到 SO。 Stack Overflow 是一个专为专业和热情的程序员准备的问答页面。将您自己的代码添加到您的问题中。您应该至少展示自己为解决这个问题所做的研究。

标签: linux bash sed grep sh


【解决方案1】:

一个班轮:

while read line; do if [[ $line == *2* ]]; then echo $line >> file_result ; fi; done < file1

【讨论】:

  • @EdMorton 需要详细说明吗?不介意学点东西。我知道这可以通过grep 2 file1 &gt; file_result 完成,但我想尝试一些新的东西。
  • 除其他外,while read line 将去除前导/尾随空格并解释反斜杠,并且速度非常慢(请参阅unix.stackexchange.com/q/169716/133219),echo $line 是不可移植的,并且会将变量公开给 shell分词、通配符和文件名扩展。除非您有特定目的并完全理解所有注意事项和含义,否则您不应使用 shell 循环来解析文本,应在需要时将 shell 循环写为 while IFS= read -r line,并应始终引用 shell 变量,例如"$line".
  • ...并且您应该在循环外写入输出文件一次,而不是重新打开它以在循环内的每次迭代中附加到它。不要使用它,因为它是错误的方法,但如果您要使用可移植、健壮(但仍然非常慢)的语法,则为 while IFS= read -r line; do if [[ $line == *2* ]]; then printf '%s\n' "$line"; fi; done &lt; file1 &gt; file_result
猜你喜欢
  • 1970-01-01
  • 2012-01-24
  • 2021-09-14
  • 2018-08-10
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
相关资源
最近更新 更多