使用 sed 或 awk 和 tcl regsub 函数从字符串中删除制表符

问题描述 投票:0回答:4

假设我有一个字符串

name    = xyz
在名称之后有一个制表符,在“=”之后有随机数量的空格。

我需要一个输出

name=xyz

那么如何使用 sed 或 awk 和 tcl regsub 函数从上述字符串中删除制表符和随机数量的空格。 非常感谢您的帮助。谢谢。

我试过了

[regsub -all { +} $str ""]

这从

$str
中删除了随机数量的空格,但制表符仍然存在。

awk sed tcl regsub
4个回答
4
投票

\s
匹配制表符和空格。那么请你试试:

[regsub -all {\s+} $str ""]

这里的潜在问题是它会删除任何地方的空白字符,而不管与

=
符号的相关性。

这样说会更安全:

[regsub {\t=\s*} $str "="]

删除

=
之前的制表符和
=
之后的空格。


1
投票

这也是使用

sed

的解决方案
myvar=$(sed -E 's/\s*=\s*/=/g' <<<$myvar)

或者,为了更便携,您可以使用

[[:space:]]
而不是
\s

myvar=$(sed -E 's/[[:space:]]*=[[:space:]]*/=/g' <<<$myvar)

在这里每次被任意数量的空格符号包围的

=
的出现将被替换为
=
,没有任何空格。


1
投票

使用

bash
参数替换:

$ str='name    = xyz'
$ str="${str//[ \t]/}"
$ echo "$str"
name=xyz

# or

$ str='name    = xyz'
$ str="${str//[[:space:]]/}"
$ echo "$str"
name=xyz

0
投票

我会按照以下方式利用 GNU

AWK
完成这项任务

echo "name    = xyz" | awk 'BEGIN{OFS=""}{$1=$1;print}'

给出输出

name=xyz

说明:GNU

AWK
假设字段分隔符是一个或多个符合您的用例的空白字符,我将
OFS
设置为空字符串,因此字段之间没有任何内容,
$1=$1
触发字符串重建,
 print
确实打印出来了。如果您想了解更多有关
OFS
的信息,请阅读8个强大的Awk内置变量——FS、OFS、RS、ORS、NR、NF、FILENAME、FNR

(在 GNU Awk 5.0.1 中测试)

© www.soinside.com 2019 - 2024. All rights reserved.