Q:次の文が始まる前に、すべての文の終わりに2つのスペースが必要なuserNotes.txtの修正テキストを印刷(画面に表示)するには、どのコマンドを実行しますか?
これは私のコードです
sed 's/.\s/.\s\s/'
ただし、これにより、ドットとスペースの2つで終わる行も、ドットとスペースの3つに変わります。
答え1
sed 's/\.[[:space:]]\{1,\}/. /g'
ドット(\.
またはと一致[.]
、.
すべての文字と一致する必要があります)、1つ以上の空白文字(および[[:space:]]
と一致する標準文字\s
)、.
2つのスペースで置き換えられます。
!
次のこともできます?
。
sed 's/\([.!?]\)[[:space:]]\{1,\}/\1 /g'
最新バージョンのGNUでは、sed
これを次のように短縮できます。
sed -E 's/([.!?])\s+/\1 /g'
または以下を使用してperl
:
perl -lne 's/[.!?]\K\s+/ /g'
[[:space:]]
\s
すべての空白文字と一致します(perl
ASCII文字のみ可能)。これには、MS-DOS テキスト ファイルの行末に表示されますが、通常は空白として使用されない CR 文字が含まれます。したがって、これらのコマンドを MS-DOS 形式のファイルに適用すると、最終的に MS-DOS 行区切り文字が壊れる可能性があります。
/代わりにCRなしで[[:space:]]
/を使用できます(サポートされていますがGNUではありません)。\s
[[:blank:]]
\h
\h
perl
sed
答え2
テキストが「file」というファイルに保存されていると仮定すると、awk
次のように使用できます。
cat file
this is OK: Turn the knob. Push the \u201con\u201d button. This is not: Turn the knob. Push the \u201con\u201d button.
awk '$1=$1' OFS=" " file
またはsed
次のようになります。
sed -E "s/[[:space:]]+/ /g" file