1. ホーム
  2. bash

[解決済み] Bashで文字列から改行を削除する方法

2022-02-03 17:45:03

質問

次のような変数があります。

echo "|$COMMAND|"

を返します。

|
REBOOT|

最初の改行を削除するには?

どのように解決するのですか?

バッシュ は、いくつかのバシズムがあります。

tr コマンドは次のように置き換えることができます。 // バシズム :

COMMAND=$'\nREBOOT\r   \n'
echo "|${COMMAND}|"
|
   OOT
|

echo "|${COMMAND//[$'\t\r\n']}|"
|REBOOT   |

echo "|${COMMAND//[$'\t\r\n ']}|"
|REBOOT|

参照 パラメータ展開 クオーツ をbashのmanページに追加しました。

man -Pless\ +/\/pattern bash
man -Pless\ +/\\\'string\\\' bash

man -Pless\ +/^\\\ *Parameter\\\ Exp bash
man -Pless\ +/^\\\ *QUOTING bash

さらに...

AlexJordan の質問にあるように、これは すべて を指定した文字です。では $COMMAND がスペースを含んでいる場合...

COMMAND=$'         \n        RE BOOT      \r           \n'
echo "|$COMMAND|"
|
           BOOT      
|

CLEANED=${COMMAND//[$'\t\r\n']}
echo "|$CLEANED|"
|                 RE BOOT                 |

shopt -q extglob || { echo "Set shell option 'extglob' on.";shopt -s extglob;}

CLEANED=${CLEANED%%*( )}
echo "|$CLEANED|"
|                 RE BOOT|

CLEANED=${CLEANED##*( )}
echo "|$CLEANED|"
|RE BOOT|

短く

COMMAND=$'         \n        RE BOOT      \r           \n'
CLEANED=${COMMAND//[$'\t\r\n']} && CLEANED=${CLEANED%%*( )}
echo "|${CLEANED##*( )}|"
|RE BOOT|

バッシュ 持つ extglob オプションを有効にすること ( shopt -s extglob を使用するために *(...) の構文があります。