![ピリオドの後、1つ以上のスペースのファイルを検索して2つのスペースに置き換えます。 [閉じる]](https://linux33.com/image/11718/%E3%83%94%E3%83%AA%E3%82%AA%E3%83%89%E3%81%AE%E5%BE%8C%E3%80%811%E3%81%A4%E4%BB%A5%E4%B8%8A%E3%81%AE%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%97%E3%81%A62%E3%81%A4%E3%81%AE%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%AB%E7%BD%AE%E3%81%8D%E6%8F%9B%E3%81%88%E3%81%BE%E3%81%99%E3%80%82%20%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
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