したがって、次の名前のリストを含むファイルがあります。
Thomas Newbury
Calvin Lewis
E. J. Frederickson
Lamar Wojcik
J.C. Lily
Lillian Thomas
私は最終的にそれらを名前と姓の長いリストに分けようとします。しかし、その前に「EJ」を「EJ」に変えたいのですが、bashで何をすべきかわかりません。
「EJ」と一致することはわかっていますが、2"[A-Z]+. [A-Z]+."
点文字の間のコンテキストからのみスペースを削除できるコマンドは何であるかわかりません。
答え1
私はこれがGNUで動作すると思いますsed
。
sed -E 's/^([A-Z]+\.)[[:blank:]]([A-Z]+\.)/\1\2/' file
答え2
私の考えでは、sedが最善の選択だと思います。私のバージョンは次のとおりです。
sed -r ':a;s/^(.*\.)(\ )+(.\.)(.*)$/\1\3\4/;t a' file
-r -- use extended regular expressions
:a -- label "a"
^(.*\\.) -- 1st group matches any character "." from the line beginning up to a literal "\\.".
(\ )+ -- 2nd group matches white space (+ is one or more)
(.\.) -- 3rd group matches the next letter
(.*)$ -- 4th group matches to the end of the line
;t a -- if the previous substitution did something then branch to label "a"
/\1\2\4/ -- replaces the matches with groups 1,3,4 removing the space
これは任意の略語を処理できます(例:SOV Sovereign)。