首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用sed将第一个空格替换为空字符串

如何使用sed将第一个空格替换为空字符串
EN

Stack Overflow用户
提问于 2014-01-08 06:50:19
回答 3查看 30.4K关注 0票数 5

我在将空格分隔的文本文件加载到表中时遇到问题。这个文本文件中的数据是由teragen生成的,因此,它只是一个虚拟数据,其中只有2列,并且第一列包含随机的特殊字符串的值。

示例:

~~~{ZRGHS|

~~~{qahVN)

我遇到了一个问题,因为其中一些值中有一个空格作为随机ASCII字符,这导致它认为有3列,而我的表有2列,所以它们被拒绝了。

因此,我想要做的是只从这些被拒绝的行中删除第一个空格,这将需要在每一行上重复多次,然后尝试重新加载它们。sed是最好的方式,还是像tr这样的其他方式更合适?

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2014-01-08 07:01:08

据我所知,您希望删除除最后两个之外的所有空格。

  • 你可以为此构建一个正则表达式,或者你可以利用它很容易保持前n次的事实:

$ echo‘一二三四’| rev | sed 's/ 2g‘| rev onetwo三四

或者,使用一个文件:

rev myfile | sed 's/ 2g‘|rev

  • 或者您可以删除一个空格,直到只剩下一个空格:

$ echo‘一二三四’| sed ':a;/ .* /{s/;ba}‘onetwo三四

使用一个文件:

sed ':a;/ .* /{s/;ba}‘myfile

  • ,或者,如果你有兴趣,你可以拆分行,玩它,然后把它组装回来(假定是GNU sed ):

$ echo‘一二三四’| sed -r 's/(.*)(^ +) (^ +)$/\1\n\2 \3/;h;s/\n.*/;s/g;g;s/\n.*\n//‘onetwo三四

使用一个文件:

sed -r 's/(.*)(^ +) (^ +)$/\1\n\2 \3/;h;s/\n.*//;s/ g;g;s/\n.*\n/‘myfile

票数 8
EN

Stack Overflow用户

发布于 2014-01-08 06:58:17

要删除一行中的第一个空格,请使用

代码语言:javascript
复制
echo "my line with spaces" | sed 's/ //'

取决于您的方法的具体情况(固定的列长度?如何添加数据?)也许有一种更好的方法可以在单个步骤中完成这一点,而不是一遍又一遍地解析被拒绝的行。

票数 5
EN

Stack Overflow用户

发布于 2017-11-17 22:09:45

要从字符串中剥离/删除第一个字符:

function stringStripStart { echo ${1:1:${#1}} }

类似于删除处理字符:

function stringStripEnd { FINAL_LEN=${#1}-1 echo ${1:0:$FINAL_LEN} }

注意:对于空字符串,需要添加一些额外的条件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20983631

复制
相关文章

相似问题

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