Awk 如何在linux中删除2个或更多以字符开头和结尾的空格

Awk 如何在linux中删除2个或更多以字符开头和结尾的空格,awk,sed,replace,command-line,command,Awk,Sed,Replace,Command Line,Command,我有很多文本文件,在一些行中,我的内容如下: , + 304685593 2, , +$ $ $ 304685593$ 2, cat-A的结果如下所示: , + 304685593

我有很多文本文件,在一些行中,我的内容如下:

, +


                        304685593
                        2,
, +$
              $
               $
                304685593$
                2,
cat-A的结果如下所示:

, +


                        304685593
                        2,
, +$
              $
               $
                304685593$
                2,
但我只想拥有以下内容:

, 304685593,
我使用了下面的命令,但它不起作用,如果有人能给我一个提示,真的很感激吗? 我想删除超过2个空格的字符,并删除超过2个空格后的第一个加号和最后一个字符

find . -name "*.txt"  | xargs sed -i.bak -e 's/+ \{2,\}/ /g;s/\{2,\}1/ /g;s/\{2,\}2/ /g;s/\{2,\}3/ /g;'

使用
gnu awk
,您可以将其与自定义
RS
一起使用:

awk-vrs='(^ | \n),[^,]+,(\n |$)'RT{
$0=RT
gsub(/[:space:]{2,}/,“”)
子(/\+/,“”)
}1'ORS=文件

使用
gnu awk
,您可以将其与自定义
RS
一起使用:

awk-vrs='(^ | \n),[^,]+,(\n |$)'RT{
$0=RT
gsub(/[:space:]{2,}/,“”)
子(/\+/,“”)
}1'ORS=文件
EDIT:要在
find
命令中运行此命令,请尝试以下操作(使用显示的示例编写和测试)。我强烈建议在测试目录中的第一个2 o3 3测试文件中测试此命令,然后您可以在实际文件上运行

首先创建
script.awk
,如下所示(
cat
下面的命令不是只显示
script.awk
内容的代码):

然后运行以下
find
命令对文件进行就地更新

find . -name "*.txt"  -exec \
     bash -c 'awk -f script.awk "$1" >"$1".tmp && mv "$1".tmp "$1"' _ {} \;


仅在单个文件上运行:请您尝试使用GNU
awk
中显示的示例编写并测试以下内容

awk-v RS=“^$”'
{
gsub(/\n+[:space:]+\n+\n+[:space:]+$/,“”)
gsub(/\n+[:space:]+\+[:space:]+/,OFS)
gsub(/[:空格:]+[0-9]+,/,“,”))
$1=$1
}
1'输入文件
编辑:要在
find
命令中运行此命令,请尝试以下操作(使用显示的示例编写并测试)。我强烈建议在测试目录中的第一个2 o3 3测试文件中测试此命令,然后您可以在实际文件上运行

首先创建
script.awk
,如下所示(
cat
下面的命令不是只显示
script.awk
内容的代码):

然后运行以下
find
命令对文件进行就地更新

find . -name "*.txt"  -exec \
     bash -c 'awk -f script.awk "$1" >"$1".tmp && mv "$1".tmp "$1"' _ {} \;


仅在单个文件上运行:请您尝试使用GNU
awk
中显示的示例编写并测试以下内容

awk-v RS=“^$”'
{
gsub(/\n+[:space:]+\n+\n+[:space:]+$/,“”)
gsub(/\n+[:space:]+\+[:space:]+/,OFS)
gsub(/[:空格:]+[0-9]+,/,“,”))
$1=$1
}
1'输入文件
这可能适合您(GNU-sed):

将两个逗号之间的行集合起来,删除除第一组数字以外的所有内容,并用逗号将结果括起来

备选方案:

sed -zE 's/, \+\n[^,0-9]*([0-9]+)[^,]*,\n/,\1,/' file
这可能适用于您(GNU-sed):

将两个逗号之间的行集合起来,删除除第一组数字以外的所有内容,并用逗号将结果括起来

备选方案:

sed -zE 's/, \+\n[^,0-9]*([0-9]+)[^,]*,\n/,\1,/' file

试试sed-Ez的/(^ |\n),[^[:alnum:]*([0-9]+)[:space:]{2,}[0-9],($|\n)/\1、\2、\3/g'@WiktorStribiżew:这不起作用,没有发生任何变化。除了新行之外,是否可以考虑空格?在输入或输入中用多条线显示单行线?@ AUBHAVA:它是多行。但是,我想知道我们是否也可以考虑多个空间?你可以在代码< >代码> SED-EZ′s/(^ ^ \n)、[^::AlnUn:] +([0:9])[{0:9],[$:\n ] /\ 1,\ 2,\ 3 /g′< /c> > WikTrReTrBiBe>:这是不起作用的,没有发生任何变化。除了新行之外,是否可以考虑空格?在输入或输入中用多条线显示单行线?@ AUBHAVA:它是多行。但是我想知道我们是否也可以考虑多个空间?如果问题是基本的,你能显示<代码> CAT文件-<代码>吗?但是,我如何给出输入文件并将此命令应用于获取输出?您可以看到,此命令最终接受一个文件作为参数。如果我的问题是基本的,那么很抱歉。但是,我如何给出输入文件并将此命令应用于获取输出呢?您可以看到,此命令最终接受一个文件作为参数。