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

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

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

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

4回答

3159閲覧

Linux sedコマンドの使い方

mahoken

総合スコア85

sed

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

3クリップ

投稿2018/01/17 07:39

編集2018/01/19 03:19

Linuxコマンドの初心者です。

ファイル内の"abc"という文字列を置換したいのですが、
"abcde"の様に後尾に文字列がある場合は置換しないということは可能でしょうか?

######実現したいこと

  • 置換したい文字列

1.単純な文字列 abc
2.後尾にドット(.)が付与されている文字列 abc.
3.ダブルクオーターで囲まれている文字列 "abc"

  • 置換しない文字列

1.前に英文字が付与されている文字列 XYZabc
2.後尾に英文字が付与されている文字列 abcDEF

//現在のコマンド sed 's/abc/置換後の文字列/g' sample.txt

ご教授お願いいたします。

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

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

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

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

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

guest

回答4

0

abcで終わる単語のみを置換する、ABCDEFは置換しないがXYZABCは変える、というのでしたら

s/abc\>/xxx/g

ではだめなんでしょうか?
これだとabc_d は置換されてしまうので、プログラム言語の変数名の入れ替えだと注意が必要です。

追記
ABCDEFもXYZABCも置換しない。
”ABC"やABC.self は置換する。
でしたら、

s/\<abc\>/xxx/g

でいけるはず。

投稿2018/01/19 03:10

編集2018/01/19 23:30
a_saitoh

総合スコア702

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

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

mahoken

2018/01/19 03:14

追加の情報をありがとうございます。 実現したいのは、 ABCDEFやXYZABCもどちらも置換しない。 置換したいのは、 ダブルクオートで囲まれた、"ABC"や 後尾にドット(.)がついた ABC. や ただの ABCです。 質問内容の情報不足でした。 申し訳ありません。
guest

0

こういうことでしょうか?

bash

1$ echo 'abc d' | sed 's/abc\b/XXX/' 2XXX d 3$ echo 'abcd' | sed 's/abc\b/XXX/' 4abcd 5$ echo 'abc' | sed 's/abc\b/XXX/' 6XXX

投稿2018/01/17 12:40

emasaka

総合スコア524

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

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

mahoken

2018/01/18 01:18

回答ありがとうございます! 知識がない為、見ただけでは解決できるかわからないので、試して見ます
guest

0

ベストアンサー

もしかすると質問内容があいまいなために求める回答を得られていないのかもしれません。以下は、後尾文字列が英数字と仮定して、abcdef.aaabc.abc abcabc,abcef abcabcdef.aaxxx.xxx abcxxx,abcef xxxに変換する例です。後尾に英数字が付かない場合と、文末の場合のみxxxに置換しています。

$ echo 'abcdef.aaabc.abc abcabc,abcef abc' | \ sed -e 's/abc([^[:alnum:]])/xxx\1/g' -e 's/abc$/xxx/g'

投稿2018/01/17 10:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

mahoken

2018/01/18 01:19

回答ありがとうございます。 教えていただいたコマンドでやりたいことができました。 ありがとうございました。
mahoken

2018/01/18 08:47 編集

すみません、 大変、お手数ですが教えてください。 コマンドの中で、xxx\1と指定してますが、1の役割がわからないです。 教えていただければ幸いです。
KojiDoi

2018/01/18 09:13

\1 = abc([^[:alnum:]])のカッコで括った部分 にマッチした文字列。
退会済みユーザー

退会済みユーザー

2018/01/18 09:53

KojiDoiさんのフォローの通りです 。置換前の文字列の中に()で囲まれた正規表現があると、それを順番に\1, \2などとして、置換後の文字列の中で使うことができます。 話を分かりやすくするために、s/abc([XY])/ABC\1/g に'abcX abcY'という文字列を食わせると、'ABCX ABCY'となります。
mahoken

2018/01/19 00:45

なんとなくですが理解ができました。 丁寧なご回答ありがとうございました。
guest

0

こういうことでしょうか?

sed 's/abc$/置換後の文字列/' sample.txt

投稿2018/01/17 08:54

KojiDoi

総合スコア13671

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

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

mahoken

2018/01/18 01:18

回答ありがとうございます! 教えていただいたコマンド試して見ます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問