我想从用户那里获取字符串输入并进行一些 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脚本?如果我的问题有意义
答案 0 :(得分: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"