Я хочу присоединиться к нескольким строкам в файле на основе шаблона это обе доли строк.
Это - мой пример:
{101}{}{Apples}
{102}{}{Eggs}
{103}{}{Beans}
{104}...
...
{1101}{}{This is a fruit.}
{1102}{}{These things are oval.}
{1103}{}{You have to roast them.}
{1104}...
...
Я хочу присоединиться к строкам {101}{}{Apples}
и {1101}{}{This is a fruit.}
к одной строке {101}{}{Apples}{1101}{}{This is a fruit.}
для последующей обработки.
То же идет для других строк.
Как Вы видите, обе строки совместно используют номер 101, но я понятия не имею, как осуществить это. Какие-либо Идеи?
/ РЕДАКТИРОВАНИЕ:
Я нашел "обходное решение":
Во-первых, удалите все предыдущие "{1" символ от группы два в ВИЗУАЛЬНОМ Блочном режиме с C-V
(или подобный ярлык), затем вид все строки числом с :%sort n
, затем присоединитесь к каждой второй строке с :let @q = "Jj"
сопровождаемый 500@q
.
Это работает, но оставляет меня с {101}{}{Apples} 101}{}{This is a fruit.}
. Я должен был бы затем добавить отсутствующие символы "{1" в каждой строке, не совсем что я хочу. Любая справка ценится.
Вместо того, чтобы удалить {1
, просто сделайте
:%sort rn /\d\d\d}/
Это сделает числовой вид, но на каждой строке он только посмотрит на три цифры, сопровождаемые}.
Кроме того, для присоединения к строкам впоследствии я сделал бы
:g/{\d\d\d}/j!
Вот способ сделать это в оболочке с файлом:
join -j 2 \
<(sed -n '/^{...}/{s/{/{ /;s/}/ }/;p}' inputfile) \
<(sed -n '/^{....}/{s/{./& /;s/}/ }/;p}' inputfile) |
sed 's/^\([^ ]*\) { }{}\({[^}]*}\) {1 }\({.*}\)$/{\1}{}\2{1\1}\3/'
Это использует первые два вызова sed
разделять файл на основе количества цифр между первым набором фигурных скобок и добавляет пробелы вокруг последних трех цифр ({101}
становится { 101 }
и {1101}
становится {1 101 }
). Затем это использует те трехзначные числа в качестве поля для join
командная клавиша на. Последнее sed
команда откладывает цифры, где они принадлежат, и удаляет дополнительные пространства, добавленные ранее.
A vim
гуру мог, вероятно, сделать что-то лучше в vim
. Я мог сделать что-то более простое, чем вышеупомянутое использование AWK.