У меня есть файл и вы хотите заменить шаблон другой строкой.Использование SED для замены шаблона приводит к появлению дополнительных символов
#PBS -N bench1-M1-plt2-size15
#PBS -o /home/results/bench1-M1-plt2-size15.out
./run -d ./results/ --config=bench1-M1-plt2-size15.conf \
--results=bench1-M1-plt2-size15.res config/myConfig.txt -F 2000000
Я использую эту команду
sed 's/M1-[^-]*-[^-]/M1-plt32-size10/g' filename
Однако выходной файл выглядит следующим образом:
#PBS -N M1-plt32-size100
#PBS -o /home/mahmood/gem5/results/M1-plt32-size100.out
./run -d ./results/ --config=bench1-M1-plt32-size100.conf \
--results=bench1-M1-plt32-size100.res config/myConfig.txt -F 2000000
Пожалуйста, обратите внимание, дополнительный '0' символ после "size10". Как вы можете видеть, в команде SED размер равен 10, однако выходной файл «size100»
В чем проблема и как я могу это исправить?
вы можете объяснить, что делает '[^ \.] *' Значит и в чем разница с '[^ -] * '?? – mahmood
Да, конечно. '[^ \.] *' означает 0 или более символов до тех пор, пока точка '.' не будет найдена, тогда как' [^ \ -] * 'означает 0 или более символов, пока не будет найден дефис' -'. Поскольку в вашем исходном тексте у вас есть только 1 дефис после 'M1-', поэтому я использовал '[^ -] * - [^ \.] *' Для соответствия '-plt2-size15', который находится непосредственно перед точкой' .'. – anubhava
ok Спасибо, я получил его – mahmood