148

私は小さな産業用ボックスに組み込みLinux用のシェルスクリプトを書いています。テキストを含む変数がありpid: 1234、行から最初のX文字を削除したいので、1234だけが残ります。「クリーンアップ」する必要のある変数がもっとあるので、X個の最初の文字を切り取る必要があり${string:5}、システムで何らかの理由で機能しません。

ボックスにあると思われるのは。だけですsed

私は以下を機能させようとしています:

result=$(echo "$pid" | sed 's/^.\{4\}//g')

何か案は?

4

11 に答える 11

219

以下が機能するはずです。

var="pid: 1234"
var=${var:5}

bashシェルがスクリプトを実行していることを確認しますか?

POSIX準拠でも

var=${var#?????}

外部プロセスを使用するよりも望ましいでしょうが、これには固定長パターンの形式で5をハードコーディングする必要があります。

于 2012-07-13T12:40:44.810 に答える
133

を使用して最初のX文字を切り取る簡潔な方法を次に示しcut(1)ます。この例では、5番目の文字で始まる部分文字列を切り取って、最初の4文字を削除します。

echo "$pid" | cut -c 5-
于 2014-12-04T08:09:20.383 に答える
48

構文を使用するには、-rオプション(「スクリプトで拡張正規表現をsed使用する」)を使用し{n}ます。

$ echo 'pid: 1234'| sed -r 's/^.{5}//'
1234
于 2012-07-13T12:00:18.540 に答える
21

文字列から最初の2文字を切り取ります。

$ string="1234567890"; echo "${string:2}"
34567890
于 2015-04-20T14:06:12.400 に答える
10

awk '{print substr($0,42)}'42がドロップする文字数より1つ多い場所にパイプで通します。例えば:

$ echo abcde| awk '{print substr($0,2)}'
bcde
$
于 2014-09-12T17:53:09.093 に答える
8

たぶん、あなたもそうするでしょうcut。もしそうなら:

[me@home]$ echo "pid: 1234" | cut -d" " -f2
1234
于 2012-07-13T12:04:46.407 に答える
6

さて、ここには、、、および構文を使用した解決策sedawkありますcutbash別のPOSIX準拠バリアントを投入したいだけです。

$ echo "pid: 1234" | tail -c +6
1234

-c入力データの終わりから数えて、どのバイトオフセットを開始するかをテールに指示しますが、数値が+符号で始まる場合は、入力データの最初から最後までです。

于 2019-04-15T16:38:57.780 に答える
4

別の方法では、cutの代わりにを使用しsedます。

result=`echo $pid | cut -c 5-`
于 2017-05-09T13:47:06.363 に答える
2

私はこの質問によって提供された純粋なsedで答えを見つけました(確かに、この質問が投稿された後に投稿されました)。これは、sedだけで、あなたが求めたことを正確に実行します。

result=\`echo "$pid" | sed '/./ { s/pid:\ //g; }'\``

)のドットはsed '/./、一致させたいものです。私の場合、ファイル内の特定の行を照合してコメントを解除したかったことを除いて、あなたの質問はまさに私が試みていたものです。私の場合は次のとおりです。

# Uncomment a line (edit the file in-place):
sed -i '/#\ COMMENTED_LINE_TO_MATCH/ { s/#\ //g; }' /path/to/target/file

その後-isedファイルをその場で編集します(ファイルを編集する前に一致する式をテストする場合は、このスイッチを削除します)。

(この質問が尋ねられ、以前の回答のどれもその問題を解決しなかったので、私はこれをsedで完全にやりたかったので、これを投稿しました。)

于 2018-11-01T18:20:05.130 に答える
0

最初からn文字を削除するのではなく、数字を直接抽出することもできます。そのようです...

$ echo "pid: 1234" | grep -Po "\d+"

これはより堅牢なソリューションであり、より直感的に思えます。

于 2018-05-26T00:32:20.573 に答える
-7

これも仕事をします:

echo "$pid"|awk '{print $2}'
于 2012-07-13T11:58:52.780 に答える