используя sed & ldquo; r & rdquo; искать текст и добавлять содержимое файла

"Map<String , String > map = new HapshMap<String , String>;
 map.add("one","java");
 map.add("two" ,"spring");
 Set<Entry<String,String>> set =  map.entrySet();
 List<Entry<String , String>> list = new ArrayList<Entry<String , String>>    (set);
 for(Entry<String , String> entry : list ) {
   System.out.println(entry.getKey());
   System.out.println(entry.getValue());
 } "
0
задан bnoeafk 27 February 2019 в 23:34
поделиться

2 ответа

sed отлично подходит для s / old / new, но для всего остального просто используйте awk:

$ awk 'NR==FNR{new=new [110] ORS; next} {print} [110]=="/def/ghi/jkl"{printf "%s", new}' numbers letters
/abc/def/ghi
/def/ghi/jkl
123
/ghi/jkl/mno

Вышеописанное будет работать в любом awk в любой оболочке на любой коробке UNIX для любого содержимого любого входные файлы. Он просто создает переменную с именем «new», читая numbers по одной строке за раз и конкатенируя, затем читает letters и печатает текущую строку, а затем печатает содержимое new, если текущая строка - это строка интересует.

0
ответ дан Ed Morton 27 February 2019 в 23:34
поделиться

Команде r может предшествовать ноль или один адрес.

Из документации sed :

Sed Addresses

Адрес не требуется, но если указан, должен быть числом (которое подсчитывает входные строки в совокупности во входных файлах), символом доллара ('), который относится к последней строке ввода, или адресом контекста (который состоит из регулярного выражения, перед которым следует разделитель, а за которым следует разделитель). [ 1127]

В ваших примерах не используется число или $ в качестве спецификатора адреса. Единственная оставшаяся опция - это регулярное выражение, заключенное в разделители. Разделителем по умолчанию для regex в sed является косая черта (/).

Поскольку / является разделителем regex, любое использование / внутри regex необходимо избегать (т. Е. Ему предшествует \).
Команда, которая вам нужна:

sed -i '/\/def\/ghi\/jkl/ r numbers' letters2

Чтобы использовать другой разделитель для регулярного выражения (чтобы избежать необходимости избегать прямой косой черты), вы должны ставить перед ним обратную косую черту, когда он используется в качестве открытого разделителя. (до адреса). Не избегайте его, когда он используется после regex. Выход из него внутри regex говорит sed использовать его буквальное значение.

Команда в этом случае:

sed -i '\@/def/ghi/jkl@ r numbers' letters2

Пример, который вы утверждаете, работает (sed -i "def r numbers" letters), не следует этому шаблону и фактически не работает (по крайней мере, на macOS sed я использую).
Это должно быть sed -i "/def/ r numbers" letters или, если быть более точным, sed -i "/^def$/ r numbers" letters.

), который относится к последней строке ввода, или адресом контекста (который состоит из регулярного выражения, перед которым следует разделитель, а за которым следует разделитель). [ 1127]

В ваших примерах не используется число или $ в качестве спецификатора адреса. Единственная оставшаяся опция - это регулярное выражение, заключенное в разделители. Разделителем по умолчанию для regex в sed является косая черта (/).

Поскольку / является разделителем regex, любое использование / внутри regex необходимо избегать (т. Е. Ему предшествует \).
Команда, которая вам нужна:

[110]

Чтобы использовать другой разделитель для регулярного выражения (чтобы избежать необходимости избегать прямой косой черты), вы должны ставить перед ним обратную косую черту, когда он используется в качестве открытого разделителя. (до адреса). Не избегайте его, когда он используется после regex. Выход из него внутри regex говорит sed использовать его буквальное значение.

Команда в этом случае:

[111]

Пример, который вы утверждаете, работает (sed -i "def r numbers" letters), не следует этому шаблону и фактически не работает (по крайней мере, на macOS sed я использую).
Это должно быть sed -i "/def/ r numbers" letters или, если быть более точным, sed -i "/^def$/ r numbers" letters.

0
ответ дан axiac 27 February 2019 в 23:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: