编写一个bash脚本,删除不是以x、y或z开头的每一行文本
我正在尝试编写一个bash脚本,它将遍历一个文本文件TextInput.txt,并删除每一行不以s1、s2开头的文本。。。sN(其中sX是一个单字符或多字符字符串;在下面的示例中,我将使用“Rabbit”、“Squirrel”和“Puppy”作为公认的行首)。然后,它应该将所有内容写入一个新的文本文件TextOutput.txt 由于不支持bash脚本,我只编写了这个相当有限的虚拟代码编写一个bash脚本,删除不是以x、y或z开头的每一行文本,bash,Bash,我正在尝试编写一个bash脚本,它将遍历一个文本文件TextInput.txt,并删除每一行不以s1、s2开头的文本。。。sN(其中sX是一个单字符或多字符字符串;在下面的示例中,我将使用“Rabbit”、“Squirrel”和“Puppy”作为公认的行首)。然后,它应该将所有内容写入一个新的文本文件TextOutput.txt 由于不支持bash脚本,我只编写了这个相当有限的虚拟代码 #!/bin/sh TextInput=$(<TextInput.txt) AcceptedString
#!/bin/sh
TextInput=$(<TextInput.txt)
AcceptedStrings[0]='Rabbit'
AcceptedStrings[1]='Squirrel'
AcceptedStrings[2]='Puppy'
# What goes here?
echo "$TextModified" > TextOutput.txt
#/垃圾箱/垃圾箱
TextInput=$(TextOutput.txt
如果在命令行上指定了字符串,则可以使用grep-v
对其进行循环。如果已经知道所有字符串,则可以执行egrep-v^(str1 | str2 | str3)filename
再次阅读您的问题时,您说您希望删除不以指定字符串开头的行,但在示例中,您给出了一个接受字符串的列表。您可能需要对此进行澄清。如果在命令行上指定了字符串,您可以使用
grep-v
对其进行循环。如果您已经知道所有字符串gs,您可以执行egrep-v^(str1 | str2 | str3)文件名
再次阅读您的问题时,您说要删除不以指定字符串开头的行,但在示例中,您给出了一个接受字符串的列表。您可能需要对此进行澄清。如上所述,您可以使用
grep
。但是,如果您想使用bash
执行此操作,您可以说:
acceptedstring=( Rabbit Squirrel Puppy )
pattern=$( IFS=$'|'; echo "${acceptedstring[*]}" )
while read -r line; do
[[ "$line" =~ ^($pattern) ]] || echo "$line"
done < TextInput.txt > TextOutput.txt
acceptedstring=(兔子松鼠小狗)
模式=$(IFS=$'|';回显“${acceptedstring[*]}”)
当读取-r行时;执行
[[“$line”=~^($pattern)]| | echo“$line”
完成TextOutput.txt
如上所述,您可以使用grep
。但是,如果您想使用bash
,您可以说:
acceptedstring=( Rabbit Squirrel Puppy )
pattern=$( IFS=$'|'; echo "${acceptedstring[*]}" )
while read -r line; do
[[ "$line" =~ ^($pattern) ]] || echo "$line"
done < TextInput.txt > TextOutput.txt
acceptedstring=(兔子松鼠小狗)
模式=$(IFS=$'|';回显“${acceptedstring[*]}”)
当读取-r行时;执行
[[“$line”=~^($pattern)]| | echo“$line”
完成TextOutput.txt
首先将接受字符串数组转换为模式,然后使用grep
查找与模式匹配的所有行:
pattern=$(printf "|%s" "${AcceptedStrings[@]}")
pattern=${pattern:1}
grep "^($pattern)" TextInput.txt > TextOutput.txt
首先将接受字符串数组转换为模式,然后使用
grep
查找与模式匹配的所有行:
pattern=$(printf "|%s" "${AcceptedStrings[@]}")
pattern=${pattern:1}
grep "^($pattern)" TextInput.txt > TextOutput.txt
您可以尝试
egrep
:egrep“^(s1 | s2 |…| sN)”TextInput.txt>TextModified.txt
您可以尝试egrep
:egrep“^(s1 | s2 |…| sN)”TextInput.txt>TextModified.txt
“您说过要删除不以指定字符串开头的行,但在示例中,您给出了一个接受字符串的列表”-本质上,这不是同一件事吗?我把它理解为将被接受为行首的字符串列表。现在我明白你的意思了。“你说过要删除不以指定字符串开头的行,但在示例中,你给出了一个接受字符串的列表”-本质上,这不是同一件事吗?好吧,我把它看作是一个字符串列表,它将被接受为行的开头。现在我明白你的意思了。