2

この文字が特定の列 (80 など) にあるように、特定の文字 (& など) で終わるすべての行を置き換える必要があります。どのツールが最適ですか? 私はsedについて考え始めました:

sed 's/\(.*\)&/\1 <what should be here??> &/'

しかし、 & が列 80 に移動するような可変数のスペースに置き換える方法を理解できません。ありがとう!

4

4 に答える 4

2

Perl に置換部分を評価して結果を計算するように指示するto/eスイッチを使用します。s///

#! /usr/bin/env perl

use strict;
use warnings;

while (<>) {
  s/^(.*)(&)$/$1 . " " x (79 - length $1) . $2/e;
  print;
}

サンプルラン:

$ echo -e 'foo&\n&\nbar &\nbaz' | ./align-アンパサンド
フー&
                                                                               &
バー &
バズ

入力に ​​TAB 文字が含まれている場合は、より高度な処理を使用する必要があります。

于 2013-07-04T16:45:09.913 に答える
1

あなたの質問を正しく理解しているかどうかはわかりませんが、次のようなことを試すことができます(ファイルがスペースで区切られていると仮定します):

awk '/&$/ {for(i=1;i<=NF;i++) $i=(i==80)?"& "$i:$i}1' yourFile
于 2013-07-04T16:54:53.360 に答える
0
awk '/&$/{$80="&"}1' file
于 2013-07-04T18:03:25.097 に答える