首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在第一个字母之后要删除额外的空格?

在第一个字母之后要删除额外的空格?
EN

Unix & Linux用户
提问于 2018-01-02 22:54:32
回答 3查看 621关注 0票数 1

在第一个字母之后要删除额外的空格?

我们的文件包括:

代码语言:javascript
运行
复制
Blue    sky.    Nice       weather.
    White cloud.    Bright    sun.
        Cool air. Bla    bla          bla.

如何拥有这样的内容:

代码语言:javascript
运行
复制
Blue sky. Nice weather.
    White cloud. Bright sun.
        Cool air. Bla bla bla.

这个命令awk '{$1=$1} 1' file删除所有额外的空格。但是我们只需要在第一个字母之后去掉额外的空间。

有人知道吗?我们很感激你的关注!

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2018-01-03 02:16:35

使用GNU awk,您可以:

代码语言:javascript
运行
复制
awk '{match($0,/(^[ ]+)/,arr)}; {$1=$1;printf("%s%s\n", arr[1], $0)}' 

match($0, /(^[ ]+)/, arr)捕获行前导空间。$1=$1删除所有前导空格和重复空格。printf("%s%s\n", a[1], $0)}重新添加前导空格和打印.

票数 1
EN

Unix & Linux用户

发布于 2018-01-03 00:15:10

如果您运行的是Linux,并且具有GNU,您可以使用g标志和一个数字到sub妓女命令:

代码语言:javascript
运行
复制
sed -r 's/ +/ /g2' file.txt

引用info sed的话:

代码语言:javascript
运行
复制
 Note: the POSIX standard does not specify what should happen when
 you mix the `g' and NUMBER modifiers, and currently there is no
 widely agreed upon meaning across `sed' implementations.  For GNU
 `sed', the interaction is defined to be: ignore matches before the
 NUMBERth, and then match and replace all matches from the NUMBERth
 on.

但是,由于在一种情况下,您确实希望在空格的第一个实例上进行替换(当没有前导空格时),所以完整的答案(用GNU Sed)是:

代码语言:javascript
运行
复制
sed -r 's/^/ /;s/ +/ /g2;s/^ //' file.txt

换句话说,向所有行添加一个前导空间,然后“挤压”除第一个以外的连续空格的所有实例,然后删除添加的前导空间。

代码语言:javascript
运行
复制
unexpand file.txt | sed 's/  */ /g' | expand

或者更简单地说:

代码语言:javascript
运行
复制
unexpand file.txt | tr -s ' ' | expand
票数 2
EN

Unix & Linux用户

发布于 2018-01-03 02:13:46

awk中,这里有一种接吻的方法,我认为:

代码语言:javascript
运行
复制
{tmp = substr($0,1,match($0,/[^ \t]/)-1); $1=$1; print tmp""$0}

例如。

代码语言:javascript
运行
复制
$ awk '{tmp = substr($0,1,match($0,/[^ \t]/)-1); $1=$1; print tmp""$0}' file
Blue sky. Nice weather.
    White cloud. Bright sun.
        Cool air. Bla bla bla.
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/414390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档