Bash 使用终端从文件中删除多个字

Bash 使用终端从文件中删除多个字,bash,edit,Bash,Edit,我有一个要从文件file.txt中删除的单词列表word1 word2 word3。如何使用终端来实现这一点 cat file.txt | sed "s/word1//g" | sed "s/word2//g" 如果要将内容写入新文件,请执行以下操作: cat file.txt | sed "s/word1//g" | sed "s/word2//g" > newfile.txt 如果要将内容写入新文件,请执行以下操作: cat file.txt | sed "s/word1/

我有一个要从文件
file.txt
中删除的单词列表
word1 word2 word3
。如何使用终端来实现这一点

 cat file.txt | sed "s/word1//g" | sed "s/word2//g" 
如果要将内容写入新文件,请执行以下操作:

 cat file.txt | sed "s/word1//g" | sed "s/word2//g" > newfile.txt
如果要将内容写入新文件,请执行以下操作:

 cat file.txt | sed "s/word1//g" | sed "s/word2//g" > newfile.txt
假设:

  • 替换只能用于整个单词,而不仅仅是任何子字符串
  • 替换应在适当的位置进行-即,结果应写回输入文件

  • GNU
    sed
    (改编自@jaypal的评论):

  • FreeBSD/OSX
    sed

    sed -E -i '' 's/[[:<:]](word1|word2|word3)[[:>:]]//g' file.txt
    
    sed-E-i''s/[[::]///g'file.txt
    

如果搜索词可以是彼此的子字符串,则可采用不同的解决方案:

# Array of sample search words.
words=( 'arrest' 'arrested' 'word3' )

# Sort them in reverse order and build up a list of alternatives
# for use with `sed` later ('word3|arrested|arrest').
# Note how the longer words among words that are substrings of
# each other come before the shorter ones.
reverseSortedAlternativesList=$(printf '%s\n' "${words[@]}" | sort -r  | tr '\n' '|')
# Remove the trailing '|'.
reverseSortedAlternativesList=${reverseSortedAlternativesList%|}

# GNU sed:
sed -r -i 's/\b('"$reverseSortedAlternativesList"')\b//g' file.txt

# FreeBSD/OSX sed:
sed -E -i '' 's/[[:<:]]('"$reverseSortedAlternativesList"')[[:>:]]//g' file.txt
#示例搜索词数组。
words=(“逮捕”“逮捕”“word3”)
#按相反顺序对它们进行排序,并建立一个备选方案列表
#与'sed'later('word3 | respond | response')一起使用。
#请注意,作为子字符串的单词中较长的单词
#彼此比较矮的先。
ReverseSortedAlternativeList=$(printf'%s\n'${words[@]}| sort-r | tr'\n'|')
#删除尾部的“|”。
ReverseSortedAlternativeList=${ReverseSortedAlternativeList%|}
#GNU sed:
sed-r-i的/\b(“$reverseSortedAlternativesList”)\b//g”file.txt
#FreeBSD/OSX sed:
sed-E-i''s/[[::]///g'file.txt
假设:

  • 替换只能用于整个单词,而不仅仅是任何子字符串
  • 替换应在适当的位置进行-即,结果应写回输入文件

  • GNU
    sed
    (改编自@jaypal的评论):

  • FreeBSD/OSX
    sed

    sed -E -i '' 's/[[:<:]](word1|word2|word3)[[:>:]]//g' file.txt
    
    sed-E-i''s/[[::]///g'file.txt
    

如果搜索词可以是彼此的子字符串,则可采用不同的解决方案:

# Array of sample search words.
words=( 'arrest' 'arrested' 'word3' )

# Sort them in reverse order and build up a list of alternatives
# for use with `sed` later ('word3|arrested|arrest').
# Note how the longer words among words that are substrings of
# each other come before the shorter ones.
reverseSortedAlternativesList=$(printf '%s\n' "${words[@]}" | sort -r  | tr '\n' '|')
# Remove the trailing '|'.
reverseSortedAlternativesList=${reverseSortedAlternativesList%|}

# GNU sed:
sed -r -i 's/\b('"$reverseSortedAlternativesList"')\b//g' file.txt

# FreeBSD/OSX sed:
sed -E -i '' 's/[[:<:]]('"$reverseSortedAlternativesList"')[[:>:]]//g' file.txt
#示例搜索词数组。
words=(“逮捕”“逮捕”“word3”)
#按相反顺序对它们进行排序,并建立一个备选方案列表
#与'sed'later('word3 | respond | response')一起使用。
#请注意,作为子字符串的单词中较长的单词
#彼此比较矮的先。
ReverseSortedAlternativeList=$(printf'%s\n'${words[@]}| sort-r | tr'\n'|')
#删除尾部的“|”。
ReverseSortedAlternativeList=${ReverseSortedAlternativeList%|}
#GNU sed:
sed-r-i的/\b(“$reverseSortedAlternativesList”)\b//g”file.txt
#FreeBSD/OSX sed:
sed-E-i''s/[[::]///g'file.txt

sed-r-i的/\bword1\b | \bword2\b | \bword3\b//g'文件
?尝试使用
sed
将这些单词替换为空。使用
sed的/word1//g
并对另一个重复words@Floris这不是一个好办法。说我想删除逮捕和逮捕。首先申请逮捕命令,然后再申请逮捕将在文件中留下“ed”s。
sed-r-i的/\bword1\b |\bword2\b |\bword3\b//g'文件
?尝试使用
sed
将这些单词替换为空。使用
sed's/word1//g
并对另一个单词重复上述操作words@Floris这不是一个好方法。说我想删除逮捕和逮捕。首先申请逮捕命令,然后逮捕将在文件中留下“ed”。我如何确保如果word1是word2的子字符串,例如(1=逮捕和2=逮捕),那么如果文本包含逮捕,那么它不会在文本中留下“ed”?我如何确保word1是word2的子字符串,例如(1=逮捕和2=逮捕)然后,如果文本中包含被捕,那么它不会在文本中留下“ed”?如何将输出重定向到新文件,而不是就地修改?删除
-i
选项(及其参数
'
,如果在FreeBSD/OSX上),只需附加
>out.txt
即可将输出重定向到文件
out.txt
;调整第一个代码段(以类似方式修改其他代码段):
sed-r的/\b(word1 | word2 | word3)\b//g'file.txt>out.txt
如何将输出重定向到新文件而不是就地修改?删除
-i
选项(及其参数
'
,如果在FreeBSD/OSX上)只需附加
>out.txt
即可将输出重定向到文件
out.txt
;调整第一个代码段(以类似方式修改其他代码段):
sed-r的/\b(word1 | word2 | word3)\b//g'file.txt>out.txt