Имейте sed, делают замену на строке, но ПРОПУСКАЮТ первое вхождение

Я был через sed лайнерами, но все еще испытываю затруднения из-за моей цели. Я хочу к substitue соответствующим строкам на всех кроме первого вхождения строки. Мое точное использование было бы:

 $ echo 'cd /Users/joeuser/bump bonding/initial trials' | sed <
 cd /Users/joeuser/bump\ bonding/initial\ trials

Строка заменила пространство в bump bonding с пространством наклонной черты bump\ bonding так, чтобы я мог выполнить эту строку (так как, когда пробелов не оставляют, я не был бы в состоянии к CD к ней).

Обновление: Я решил это, просто используя одинарные кавычки и вывод

 cd 'blah blah/thing/another space/'

и затем использование source выполнить команду. Но это не отвечало на мой вопрос. Мне все еще любопытно, хотя..., как Вы использовали бы sed зафиксировать его?

12
задан Paused until further notice. 30 January 2010 в 02:28
поделиться

3 ответа

Вы можете избежать проблемы с G и N

заменить все они, затем отсоедините первый:

sed -e 's/ /\\ /g' -e 's/\\ / /1'

вот еще один метод, который использует Команда T филиала - если заставленная команда:

sed ':a;s/\([^ ]* .*[^\\]\) \(.*\)/\1\\ \2/;ta'

, которая имеет преимущество в том, что оставляют существующие последовательности космических космосов обратной ячейки в Intact.

12
ответ дан 2 December 2019 в 07:21
поделиться

Вид. Учитывая класс A:

A a;
...
a = A();   

последний оператор не является инициализацией, это назначение, но он, вероятно, делает то, что вы хотите.

-121--983330-

Краткий ответ:

Нет. Если часть предполагаемого поведения объекта должна быть инициализирована несколько раз, то наилучшим путем для реализации этого является доступный метод инициализации. Конструктор класса может просто отложить этот метод.

class C1 {
public:
  C1(int p1, int p2) {
    Init(p1,p2);
  }
  void Init(int p1, int p2) { ... }
};

Уголок Nitpicker:

Существует ли какой-то невероятно злой способ вызова конструктора в C++ после создания объекта? Почти наверняка это С++ в конце концов. Но это в корне зло и его поведение почти наверняка не определено стандартом и его следует избегать.

-121--983334-
s/ /\\ /2g

В 2 указано, что должен применяться второй, а в g указано, что должны применяться и все остальные. (Вероятно, это работает только на GNU sed. Согласно базовой спецификации Open Group Base Specification, " Если указаны как g , так и n , результаты не указаны. ")

8
ответ дан 2 December 2019 в 07:21
поделиться

Mootools не приходит с инструментом сериализации формы; Я знаю, что сосет.

Тем не менее, я успешно использовал эту автономную реализацию: Form2obj .

-121--2757004-

Использование awk

$ echo cd 'blah blah/thing/another space/' | awk '{for(i=2;i<NF;i++) $i=$i"\\"}1'
cd blah\ blah/thing/another\ space/

$ echo 'cd /Users/joeuser/bump bonding/initial trials' | awk '{for(i=2;i<NF;i++) $i=$i"\\"}1'
cd /Users/joeuser/bump\ bonding/initial\ trials
1
ответ дан 2 December 2019 в 07:21
поделиться
Другие вопросы по тегам:

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