質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

199閲覧

正規表現がわからない(パス文字列の一番後ろのスラッシュとそれ以降の文字列を削除したいが、円記号が混じってるとうまくいかない)

tada_tadaa

総合スコア111

sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2024/03/18 14:41

実現したいこと

ディレクトリのパス文字列の一番後ろのスラッシュとそれ以降の文字列を削除したいのですが、文字列中にバックスラッシュ(円記号か?)が含まれていなければうまく正規表現で削除できるのですが、文字列中にバックスラッシュ(円記号か?)が含まれている場合、うまく削除できません。
バックスラッシュ(円記号か?)が含まれていてもうまく削除できる方法が知りたいです。

発生している問題・分からないこと

sed.js.org

/home/tada/test/test_tada/test\a /home/tada/test/test_tada/test /home/tada/test/test_tada

のパス文字列の一番後ろのスラッシュとそれ以降の文字列を削除して以下のようにしたいです。

/home/tada/test/test_tada /home/tada/test/test_tada /home/tada/test

's%\/[^\/]*$%%'
を正規表現の欄に入力すると

/home/tada/test/test_tada/test\a /home/tada/test/test_tada /home/tada/test

↑のようになります。2行目と3行目はうまく末尾のスラッシュとそれ以降の文字列が削除できてるのですが、1行目が削除されずに残ったままです。
文字列中にバックスラッシュ、または円記号が含まれていてもうまく削除できる方法を知りたいです。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

検索していろいろ正規表現を試したがうまくいかなかった。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2024/03/18 15:15

's%/[^/]*$%%' でよいのではないでしょうか。
tada_tadaa

2024/03/18 15:29

コメントありがとうございます。 's%/[^/]*$%%' を試したところ問題が解決しました! ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
otn

2024/03/18 17:01

意味を理解しましょう。何故 \/ と書くという間違いをしてしまったのかの理由を掘り下げて解決しておきましょう。放置すると同様の間違いを繰り返すことになります。 (1) 正規表現としては / は何の特別な意味も持ちませんので \ は不要です。 正規表現中の / の前に \ を書くのは、正規表現を / で囲んでいる時だけです。 これは、" " で囲んだ文字列の中に " を書きたい時に \" と書くのと同じ話で、正規表現での記号の意味とは関係ありません。 「スラッシュを削除する時の例」 正: s%/%% 正: s/\/// 意図しない動作はしないと思うが不要な\の記述: s%\/%% (2) [ ] や [^ ] の中ではほとんどの記号は特殊な意味を失います。例外は [ ] ^ - の4文字。 [^\/] は、「バックスラッシュ(フォントによっては円記号)とスラッシュ以外の1文字」です。
tada_tadaa

2024/03/19 00:01

>意味を理解しましょう。何故 \/ と書くという間違いをしてしまったのかの理由を掘り下げて解決しておきましょう。放置すると同様の間違いを繰り返すことになります。 まだ正規表現の理解が曖昧でバックスラッシュでスラッシュをエスケープする事で正規表現がうまく処理できるかのような錯覚におちいっていました。正規表現の本を途中まで1回読んだきりで、理解が中途半端なままで、今回の問題もどこから手を付ければいいのか分からなかったのですが、正規表現の基本を押さえていれば分かる事でした。時間的に急いでたというのもありますが改めて正規表現の基本を押さえておきたいと思いました。
otn

2024/03/19 08:28

「正規表現の理解が足りない」という理由は表面的なもので、自分が何をきちんと理解していて、自分が何をちゃんと理解しないまま進めているのか、の把握が重要です。関係する知識をすべて完璧にしてからで無いと進まないのであれば、何をするにも数ヶ月・数年かかることになるので、理解不十分のまま進むのは問題ありません。 「意図通りにならないのは、\ もしくは [^ ] の意味の理解不足だろう」と現状が把握できたのかどうか? 「意図通りにならないのは、\ もしくは [^ ] の意味の理解不足だろう」と把握できていれば、 \ と [^ ] だけピンポイントに調べれば良いので、調べる範囲は狭いです。 ただ、「意図通りにならないのは、\ もしくは [^ ] の意味の理解不足だろう」という認識が出来ていなかったとすると、「現状を分析しようとしていなかった」か「現状を分析する力が無い」のどちらかなので、それぞれ何らかの対策が必要かと思います。
guest

回答1

0

ベストアンサー

※ コメントから転記

's%/[^/]*$%%' とすると良いかと思います。

投稿2024/03/18 15:30

melian

総合スコア19825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tada_tadaa

2024/03/18 15:33

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問