![如何从文件中删除特定字符](https://linux22.com/image/1185773/%E5%A6%82%E4%BD%95%E4%BB%8E%E6%96%87%E4%BB%B6%E4%B8%AD%E5%88%A0%E9%99%A4%E7%89%B9%E5%AE%9A%E5%AD%97%E7%AC%A6.png)
我有一个这样的文件。
[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