Мне нужно изменить количество пробелов в определенных положениях. Пример:Отступ в соответствии с последующей строкой
FixString VarString1
VarString2
FixString VarString3
VarString4
должен стать
FixString VarString1
VarString2
FixString VarString3
VarString4
В моем приложении, FixString известная строка (которая может быть жестко) в то время как VarString1, VarString2 являются переменными строки.
Важно то, что пробелы перед FixString настраиваются на количество пробелов перед VarString. Таким образом, количество пробелов перед FixString может стать более или менее.
Надеюсь, вы можете мне помочь. Я мог бы, конечно, проанализировать файл назад, помня о отступе в предыдущей строке и применить его, если строка начинается с «* FixString» .... Но это кажется слишком сложным.
Теперь я реализовал идею Etan. Кажется, это работает на примере. Я должен попробовать это на моих реальных файлах ...
IFS=''
MEMORY=""
while read -r line
do
STRIPPED=$(echo $line|sed 's/^ *//g')
if [ "${STRIPPED:0:9}" = "FixString" ]
then
# echo $line
MEMORY=$line
else
NUM=$(echo $line | sed 's/^\(*\).*$/\1/g')
if [ ! -z $MEMORY ]
then
echo -n $NUM
echo $MEMORY | sed 's/^ *//g'
fi
echo $line
MEMORY=""
fi
done < test.txt
Не уверен, что вы можете сделать это с помощью 'sed', но вы должны быть в состоянии сделать это с помощью' awk' достаточно легко. Распечатайте что-либо не «FixString» или «VarString». Удерживайте любую строку «FixString» до следующей строки, если «VarString» исправить отступ и распечатать еще одну строку. –