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をサポート)を使用します。
答え2
以下のawkコマンドを使用してこれを実行することもできます。
awk '{gsub("^ *","",$0);print $0}' filename