要查找“;”,请删除空格直到下一个字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了要查找“;”,请删除空格直到下一个字符相关的知识,希望对你有一定的参考价值。

我有很多行以“;”开头,然后是1个或多个空格,后面是同一行上的其他一些字符。我需要删除“;”后面的空格最多但不包括随后的字符。

我尝试了以下代码的一些变体,因为它在具有空格的行上运行良好,但我对awk不是很熟悉。

awk 'gsub(/^ +|  +$/,"")1'  filea>fileb

样本输入:

;    4
;  group 452
;          ring

需要输出:

;4
;group 452
;ring
答案

要在第一个分号后删除任何空格,请尝试:

$ awk 'sub(/^;[[:blank:]]+/, ";") 1' filea
;4
;group 452
;ring

正则表达式^;[[:blank:]]+匹配第一个分号和跟随它的任何空格或制表符。函数sub;替换它。因为这只在线上(开头)发生一次,所以不需要gsub

[:blank:]是一种指定空格的unicode安全方法。

另一答案
awk 'sub(/^; +/,";")1' file

;4
;group 452
;ring
另一答案

sed也会这样做:

sed -E 's/^(;)1([[:blank:]]+)/\1/' file

括号用作选择器,\number组合表示相应的选择。

^(;)1([[:blank:]]+)中,我们检查线的起点(^)和一次出现的;1),然后是任意数量的空白字符([[:blank:]]+),然后用我们的第一个选择替换匹配的模式。

另一答案

这将字段分隔符FS定义为记录的开头,后跟;和一组空格。然后它重新定义输出字段分隔符OFS只是一个;。从FSOFS的转换是通过将$1重新分配给自己来完成的。

awk 'BEGINFS="^; *";OFS=";"$1=$11'

要么

awk -F'^; *' -vOFS=";" '$1=$11'

以上是关于要查找“;”,请删除空格直到下一个字符的主要内容,如果未能解决你的问题,请参考以下文章

题目1168:字符串的查找删除

字符串的查找删除(王道)

字符串的查找删除

在vim中的空格后轻松对齐字符

编写程序,输入字符串(包含空格),统计其中单词的个数,单词之间以一个或多个空格分隔。

C 语言文件操作 ( 配置文件读写 | 读取配置文件 | 函数接口形参 | 读取配置文件的逐行遍历操作 | 读取一行文本 | 查找字符 | 删除字符串前后空格 )