假设我有以下文件
Y M C A
cambridge m a
d m v office
t mobile
并希望将其转换为
YMCA
cambridge ma
dmv office
t mobile
用于检测所有连续的单个字符,后跟不同长度的单个空格(大于2)。例如,项目'dmv office',我们应该检测'dm v'并将其转换为'dmv',但会保留't mobile store'完好无损(只有一个)单个字符) 是否可以在bash中执行此操作,或者我必须使用像python这样的程序来执行此操作?
答案 0 :(得分:5)
Perl one-liner:
echo 'Y M C A' | perl -ple's/\b\w\K\s(?=\w\b)//g'
==> YMCA
echo 't mobile' | perl -ple's/\b\w\K\s(?=\w\b)//g'
==> t mobile
当用单个单词字符包围时,它会替换空格。您可以\w
替换[a-zA-Z]
,如果它对您更方便的话。
答案 1 :(得分:2)
这个sed one-liner适用于给定的例子:
sed -r 's/ (\S\S)/_\1/g;s/(\S\S) /\1_/g;s/ //g;s/_/ /g' file
使用您的数据进行测试:
kent$ sed -r 's/ (\S\S)/_\1/g;s/(\S\S) /\1_/g;s/ //g;s/_/ /g' f
YMCA
cambridge ma
dmv office
t mobile
我在上面一行使用了一个占位符,_
,如果您的文字已经_
,则可以在可见字符中使用\x99
。
答案 2 :(得分:1)
在任何UNIX系统上的任何shell中都有任何awk:
$ awk '{out=$1; for (i=2;i<=NF;i++) {out = out (length($(i-1)$i)==2 ? "" : OFS) $i} print out}' file
YMCA
cambridge ma
dmv office
t mobile