我有一个包含一长串序列的文件,这些序列是逗号分隔的数字列表。可以使用 注释掉列表#
,例如
#1,2,3
#4,5,6
7,8,9
10,11,12
我想要一个 bash 命令,它采用第一个未注释的序列,拆分数字并将它们传递给一个命令(这是敲门,用于端口敲门),最后注释掉产生的行。
在上面的示例中第一次运行命令应该:
- 跑
knock myhost 7 8 9
将输入文件编辑为
#1,2,3 #4,5,6 #7,8,9 10,11,12
我想有一些超级简单的方法可以使用 sed/awk 来做到这一点,但我不太了解这些命令。
先感谢您
编辑我希望一个命令只处理输入文件中的一行,而不是通过循环消耗整个文件
编辑2*
我最终用zsh写了这个,谢谢你的帮助
#!/bin/zsh
sequences=$HOME/.knock.$1.sequences
read -A line <<< "$(grep "^[^#]" $sequences -m 1 -n)"
IFS=, read -A ports <<< $line[2]
IFS=: read -A linenum <<< $line[1]
knock $1 $ports
if nc -z -w1 $1 22;
then
sed -i "$linenum s/^/#/" $sequences
fi