sed(all)と先行スペースを一致させる正しい方法は何ですか?

sed(all)と先行スペースを一致させる正しい方法は何ですか?

sed先行するスペースを(すべて)に一致させる方法は?私は先行タブについて話すのではなく、先行スペースについてだけ話しています。

Nanoで行った簡単なテストによると、これは正しいようです。

sed "s/^ //g"

このアプローチに問題がありますか?


注:「すべて」は、2つ以上(1つではない)がある場合の文書内のすべての先行スペースを表します。

ベストアンサー1

先行スペースを削除します。sed "s/^ *//"

先行スペースを削除します。sed "s/^[[:space:]]*//"

先行スペースとタブを削除する:(sed "s/^[ \t]*//"GNU sedで動作)または
sed 's/^[[:blank:]]*//'(すべてと動作sed)またはsed $'s/^[ \t]*//'(ksh / Bash / etcでリテラルタブを提供します。sed

コメントで述べたように、/g行の先頭は行で一度だけ発生し、/gパターンは何度も再試行されないため、指定子は何もしません。置換を繰り返すには、条件分岐を明示的に追加する必要があります。sed -e :a -e 's/^ //' -e ta


^ *また、空の文字列(空白なし)と一致しますが、これは重要ではありません。少なくとも1つの空白がある行を一致させるには、拡張正規表現で^ *(二重スペース)またはを使用します。^ +たとえば、すべてのインデントを正確に2つのスペースに変更するには、または sed -e 's/^ */ /'sed -Ee 's/^ +/ /'-E:GNUおよびFreeBSDをサポート)を使用します。

おすすめ記事