如何从文件中删除特定字符

如何从文件中删除特定字符

我有一个这样的文件。

[Guest]
[AAD_987d7f2f57d2]
[mhope]
[SABatchJobs]
[svc-ata]
[svc-bexec]
[svc-netapp]
[dgalanos]
[roleary]
[smorgan]

如何从文件中删除“[”和“]”,以便我可以获得如下所示的输出

Guest
AAD_987d7f2f57d2
mhope
SABatchJobs
svc-ata
svc-bexec
svc-netapp
dgalanos
roleary
smorgan

答案1

使用sed

sed 's/[][]//g' file
  • sed命令是s/pattern/replacement/modifiers,意思是用替换来替代模式。g修饰符意味着G全局,否则只有第一个匹配项会被替换。
  • [...]是一个字符类,因此括号内的任何字符都匹配。
  • ]关闭字符类,除非它位于类内的第一个位置。因为我们想将它包含在我们的字符类中,所以我们将它放在第一个位置。
  • 在我们的例子中,替换为空。
  • 用于sed -i '...'就地编辑您的文件。

你也可以使用grep -P我已经建议的其他问题

grep -Po '\[\K[^]]*' file

答案2

删除特定字符的“标准”实用程序是tr

NAME
       tr - translate or delete characters

SYNOPSIS
       tr [OPTION]... SET1 [SET2]

DESCRIPTION
       Translate, squeeze, and/or delete characters from standard input, writ‐
       ing to standard output.

例如

tr -d '][' < file

与 GNU sed 不同,tr 仅从标准流读取和写入;但是,您可以使用临时文件模拟“就地”编辑:

tmpfile=$(mktemp)
tr -d '][' < file > "$tmpfile" && mv "$tmpfile" file

或者使用sponge包中的命令moreutils

tr -d '][' < file | sponge file

您还可以使用awk- 例如将文件的行拆分为字段]和分隔[并仅打印第二个:

awk -F '[][]' '{print $2}' file

您可以使用相同的 tmpfile 技巧来模拟“就地”编辑,或者使用 GNU awk(又名 gawk),使用该inplace模块:

gawk -i inplace -F '[][]' '{print $2}' file

相关内容