いつか、技術ブログを

新人SE(OJT中)が技術ブログを書きたがっているブログです

初心者がmacのターミナルで行末にスペース追加しようとしたけど難しかった

Markdownでこの記事を書いているのですが、はてなブログでは行末にスペースを2個入れないと改行されません、めんどくさいですよね…。
ということで、macのコマンド?シェル?みたいなやつで行末にスペースを2個入れる方法を探してみました!
(初心者で行き当たりばったりで書いてるので、理解しきれてないところがあります)

結論

echo "abc
def
ghi "  | sed -e "s/\$/  /" 

と書くと、行末にスペース2個が追加されました…!
f:id:ramenchahan:20180808142330p:plain

sedでこういう時はどう書く?

↑の、「行末に文字列を追加」のところを参考にしました。

簡単に解説していきます。

そもそもコマンドの書き方

わたしはmacを使っているので、Launchpadからターミナルっていうのを開いて、そこにコマンドを打っています。
コマンドは、基本的に、
コマンド 引数 引数 ・・・ 引数
という感じで書いていきます。
また、引数には「オプション」と「文字列」があります。
オプションはハイフンから始まってコマンドの動作を変更?するものです。
文字列は、コマンドが扱う対象のやつで、ファイル名などです。
f:id:ramenchahan:20180808123538p:plain

echo

echo [オプション] [文字列]は、引数に指定した文字列を画面に表示します。
それって何に使うの?って思いますよね?私は思いました(笑)

【 echo 】 文字列を出力する 【 Linuxコマンドまとめ 】 | Linux Fan

変数を出力したり、今回のようにパイプ(|ってやつです)で他のコマンドに文字列を渡したい場合に使われるようです。

パイプ(|)

パイプとは、コマンドの処理結果(標準出力)を次のコマンドの標準入力に渡して、さらにデータを加工することができる機能?です。

sed

sed [オプション] [編集コマンド] [ファイル名]は、入力ストリーム(ファイルまたはパイプラインからの入力)に対して文字列の置換を行います。

フィルタを使用した文字列操作 1 | UNIX & Linux コマンド・シェルスクリプト リファレンス

f:id:ramenchahan:20180808141454p:plain
例えば、echo "abcde" | sed -e 's/cd/xx/g'と書くと、abxxeと出力されます。
ちなみに、-eっていうのは、複数の置換を行いたいときに、-eオプションでs/置換前/置換後/っていう部分を連結できるよ、ということらしく、今回は省略できます。
でも、とりあえず-eって書いてる人が多いように思いました。

sed コマンド | コマンドの使い方(Linux) | hydroculのメモ

-e オプションがない場合はオプション以外の最初の引数が処理内容とみなされるので、たいていは -e を省略できる。

らしいです。

まとめ

echo "abc
def
ghi "  | sed -e "s/\$/  /" 

というのは、

abc
def
ghi

という入力に対して、\$ (半角スペース2個)に置換する、という処理だということがわかりました。
ここで、\$とは行末を表す正規表現らしいです。
なので、行末を半角スペース2個に置換するよ、という処理になります!
半角スペースも本当は正規表現で書いたりしたほうがいいんでしょうけど、もう疲れたので諦めます←

感想

そもそも、配属先でシェルとか使うらしいのでこの記事も書いたのですが、自分が想像しているのとは違う部分で難しかったり、時間がかかったりしてしまいました。
なので、お仕事では、

  • 作業時間の見積もりは余裕をもつこと(新人のうちは時間かかるって言っても許してもらえると信じてる)
  • 日頃から勉強しておく、基本を身につけておくことで問題の解決に時間をかけないようにする

っていうことを気をつけたいと思います!
なんか会社の人に読ませる感想みたいになってますが、そういうわけじゃないです(笑)