【问题标题】:Filter out ABC characters, numeric 123 and special characters out of input string using bash scripting使用 bash 脚本从输入字符串中过滤掉 ABC 字符、数字 123 和特殊字符
【发布时间】:2021-09-06 16:29:42
【问题描述】:

我想从用户那里获取字符串输入并进行一些 bash 处理以过滤掉一个文件中的 ABC 字符、另一个文件中的 123 个数值和另一个文件中的 @#$ 特殊字符。

输入字符串: ABCD1234!@#

输出:

cat file1.txt: ABCD 
cat file2.txt: 1234
cat file3.txt: !@#

我尝试了某些 cut 和 awk 命令,但没有找到任何解决方案。找到许多其他语言的解决方案,但不是 bash。

echo "abc123#@" | tr -dc '0-9' && echo "abc123#@" | tr -dc 'a-z'

我无法从中提取所有特殊字符。还有如何从一个命令。还是 bash 脚本?如果我的问题有道理

【问题讨论】:

  • @anubhava echo "abc123#@" | tr -dc '0-9' && echo "abc123#@" | tr -dc 'a-z' 我无法从中提取所有特殊字符。还有如何从一个命令。还是 bash 脚本?如果我的问题有道理。
  • 如果输入字符串是@ABCD1234PQR!@#78怎么办? file1、file2 和 file3 应该是什么?
  • @anubhava 先生。文件 1 中的 ABC 或字母字符,文件 2 中的数字和文件 3 中的特殊字符。文件 1:ABCDPQR 文件 2:123478 文件 3:@!@#。如果我没有错过字符串中的任何字符。

标签: awk cut


【解决方案1】:

您可以为此使用这个awk 命令:

str='ABCD1234!@#'

awk '{
   p = q = r = $0
   gsub(/[^[:alpha:]]+/, "", p)
   gsub(/[^[:digit:]]+/, "", q)
   gsub(/[[:alnum:]]+/, "", r)
   print p > "file1.txt"
   print q > "file2.txt"
   print r > "file3.txt"
}' <<< "$str"

【讨论】:

  • 哇哦。这很酷。另外,我尝试将 print p > "file1.txt" 更改为 print q, print $q。这段代码可以在终端上显示结果还是我必须为此制作一个不同的脚本?先生,请指导我。
  • 可以在终端打印,使用:print p, q, r
猜你喜欢
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 2019-01-18
  • 2021-06-01
  • 2014-04-10
  • 2015-03-17
  • 2017-07-16
  • 1970-01-01
相关资源
最近更新 更多