Заменить строку в сценарии bash

Я нашел очень простое решение проблемы Kindle Fire HD. Откройте Synaptic или Центр программного обеспечения Ubuntu (независимо от ваших предпочтений) и установите gMTP. Это программа, предназначенная для взаимодействия с устройствами файловой системы MTP, такими как старые MP3-плееры Creative Zen. Он также отлично работает с новым Kindle Fire HD. Вы можете просмотреть всю область хранения на Kindle Fire HD, загрузить, загрузить и удалить файлы. Попробуйте!

1
задан 21 March 2011 в 01:24

27 ответов

-i может использоваться только с sed, если вы передаете файл, это означает «inline replace». Без этого вывод sed будет записан на stdout (обычно на консольном выходе). С помощью -i он выполняет встроенную замену, то есть выполняет замены в самом файле.

Следующий код считывает содержимое jasperreports.properties в переменную $input (строка 1) и находит строка, подлежащую замене (строка 2). В третьей строке он выводит входную строку и передает ее через sed для замены. sed выводит строку на stdout, которая будет обнаружена $( и ) и поэтому будет сохранена в $input.

read input < jasperreports.properties
find=$(grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}')
input=$(echo "$input" | sed "s/$find/charts/")

Если вы хотите немедленно применить изменения к файлу:

find=$(grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}')
sed "s/$find/charts/" -i jasperreports.properties

Из man sed:

   s/regexp/replacement/
          Attempt   to   match  regexp  against  the  pattern  space.   If
          successful, replace that portion matched with replacement.   The
          replacement may contain the special character & to refer to that
          portion of the pattern space  which  matched,  and  the  special
          escapes  \1  through  \9  to refer to the corresponding matching
          sub-expressions in the regexp.
1
ответ дан 25 May 2018 в 22:33
  • 1
    но файл jasperreports.properties не изменится! – moata_u 15 March 2011 в 17:46
  • 2
    Я думал, что вы хотите сохранить вывод в строке. Добавлен код для встроенной замены. – Lekensteyn 15 March 2011 в 17:55
  • 3
    прежде всего, ваш ответ был полезен, но я хочу заменить его в файле jasperreports.properties. – moata_u 15 March 2011 в 18:07
  • 4
    @moata_u: как я уже сказал, я добавил код для ответа. Это выглядит как sed "s/$find/charts/" -i jasperreports.properties. Обратите внимание, что производится только одна замена на строку. – Lekensteyn 15 March 2011 в 18:10
  • 5
    perfect..100% ,,,, Спасибо – moata_u 15 March 2011 в 18:17

-i может использоваться только с sed, если вы передаете файл, это означает «inline replace». Без этого вывод sed будет записан на stdout (обычно на консольном выходе). С помощью -i он выполняет встроенную замену, то есть выполняет замены в самом файле.

Следующий код считывает содержимое jasperreports.properties в переменную $input (строка 1) и находит строка, подлежащую замене (строка 2). В третьей строке он выводит входную строку и передает ее через sed для замены. sed выводит строку на stdout, которая будет обнаружена $( и ) и поэтому будет сохранена в $input.

read input < jasperreports.properties find=$(grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}') input=$(echo "$input" | sed "s/$find/charts/")

Если вы хотите немедленно применить изменения к файлу:

find=$(grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}') sed "s/$find/charts/" -i jasperreports.properties

Из man sed:

s/regexp/replacement/ Attempt to match regexp against the pattern space. If successful, replace that portion matched with replacement. The replacement may contain the special character & to refer to that portion of the pattern space which matched, and the special escapes \1 through \9 to refer to the corresponding matching sub-expressions in the regexp.
1
ответ дан 25 July 2018 в 22:20

-i может использоваться только с sed, если вы передаете файл, это означает «inline replace». Без этого вывод sed будет записан на stdout (обычно на консольном выходе). С помощью -i он выполняет встроенную замену, то есть выполняет замены в самом файле.

Следующий код считывает содержимое jasperreports.properties в переменную $input (строка 1) и находит строка, подлежащую замене (строка 2). В третьей строке он выводит входную строку и передает ее через sed для замены. sed выводит строку на stdout, которая будет обнаружена $( и ) и поэтому будет сохранена в $input.

read input < jasperreports.properties find=$(grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}') input=$(echo "$input" | sed "s/$find/charts/")

Если вы хотите немедленно применить изменения к файлу:

find=$(grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}') sed "s/$find/charts/" -i jasperreports.properties

Из man sed:

s/regexp/replacement/ Attempt to match regexp against the pattern space. If successful, replace that portion matched with replacement. The replacement may contain the special character & to refer to that portion of the pattern space which matched, and the special escapes \1 through \9 to refer to the corresponding matching sub-expressions in the regexp.
1
ответ дан 26 July 2018 в 20:51

-i может использоваться только с sed, если вы передаете файл, это означает «inline replace». Без этого вывод sed будет записан на stdout (обычно на консольном выходе). С помощью -i он выполняет встроенную замену, то есть выполняет замены в самом файле.

Следующий код считывает содержимое jasperreports.properties в переменную $input (строка 1) и находит строка, подлежащую замене (строка 2). В третьей строке он выводит входную строку и передает ее через sed для замены. sed выводит строку на stdout, которая будет обнаружена $( и ) и поэтому будет сохранена в $input.

read input < jasperreports.properties find=$(grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}') input=$(echo "$input" | sed "s/$find/charts/")

Если вы хотите немедленно применить изменения к файлу:

find=$(grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}') sed "s/$find/charts/" -i jasperreports.properties

Из man sed:

s/regexp/replacement/ Attempt to match regexp against the pattern space. If successful, replace that portion matched with replacement. The replacement may contain the special character & to refer to that portion of the pattern space which matched, and the special escapes \1 through \9 to refer to the corresponding matching sub-expressions in the regexp.
1
ответ дан 2 August 2018 в 03:48

-i может использоваться только с sed, если вы передаете файл, это означает «inline replace». Без этого вывод sed будет записан на stdout (обычно на консольном выходе). С помощью -i он выполняет встроенную замену, то есть выполняет замены в самом файле.

Следующий код считывает содержимое jasperreports.properties в переменную $input (строка 1) и находит строка, подлежащую замене (строка 2). В третьей строке он выводит входную строку и передает ее через sed для замены. sed выводит строку на stdout, которая будет обнаружена $( и ) и поэтому будет сохранена в $input.

read input < jasperreports.properties find=$(grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}') input=$(echo "$input" | sed "s/$find/charts/")

Если вы хотите немедленно применить изменения к файлу:

find=$(grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}') sed "s/$find/charts/" -i jasperreports.properties

Из man sed:

s/regexp/replacement/ Attempt to match regexp against the pattern space. If successful, replace that portion matched with replacement. The replacement may contain the special character & to refer to that portion of the pattern space which matched, and the special escapes \1 through \9 to refer to the corresponding matching sub-expressions in the regexp.
1
ответ дан 4 August 2018 в 19:52

-i может использоваться только с sed, если вы передаете файл, это означает «inline replace». Без этого вывод sed будет записан в stdout (обычно это консольный вывод). С -i он выполняет inline replacement , то есть выполняет замены в самом файле.

Следующий код читает содержимое jasperreports.properties в переменную $ input (строка 1) и находит заменяемую строку (строка 2). В третьей строке он выводит входную строку и передает ее через sed для замены. sed выводит строку на stdout , которая будет улавливаться $ ( и ) и поэтому хранится в $ input .

  читать ввод & lt;  jasperreports.properties find = $ (grep "$ jasper" jasperreports.properties | awk -F "reports /" '{print $ 2}') input = $ (echo "$ input" | sed "s / $ find / charts /"  )  

Если вы хотите немедленно применить изменения к файлу:

  find = $ (grep "$ jasper" jasperreports.properties | awk -F  "reports /" '{print $ 2}') sed "s / $ find / charts /" -i jasperreports.properties  

Из man sed :

  s / regexp / replacement / Попытка совместить регулярное выражение с пространством рисунка.  В случае успеха замените эту часть, соответствующую замене.  Замена может содержать специальный символ & amp;  чтобы ссылаться на ту часть пространства шаблонов, которая была сопоставлена, и специальные escape-последовательности с \ от 1 до 9, чтобы ссылаться на соответствующие соответствующие подвыражения в regexp.   
1
ответ дан 6 August 2018 в 03:55

-i может использоваться только с sed, если вы передаете файл, это означает «inline replace». Без этого вывод sed будет записан в stdout (обычно это консольный вывод). С -i он выполняет inline replacement , то есть выполняет замены в самом файле.

Следующий код читает содержимое jasperreports.properties в переменную $ input (строка 1) и находит заменяемую строку (строка 2). В третьей строке он выводит входную строку и передает ее через sed для замены. sed выводит строку на stdout , которая будет улавливаться $ ( и ) и поэтому хранится в $ input .

  читать ввод & lt;  jasperreports.properties find = $ (grep "$ jasper" jasperreports.properties | awk -F "reports /" '{print $ 2}') input = $ (echo "$ input" | sed "s / $ find / charts /"  )  

Если вы хотите немедленно применить изменения к файлу:

  find = $ (grep "$ jasper" jasperreports.properties | awk -F  "reports /" '{print $ 2}') sed "s / $ find / charts /" -i jasperreports.properties  

Из man sed :

  s / regexp / replacement / Попытка совместить регулярное выражение с пространством рисунка.  В случае успеха замените эту часть, соответствующую замене.  Замена может содержать специальный символ & amp;  чтобы ссылаться на ту часть пространства шаблонов, которая была сопоставлена, и специальные escape-последовательности с \ от 1 до 9, чтобы ссылаться на соответствующие соответствующие подвыражения в regexp.   
1
ответ дан 7 August 2018 в 21:52

-i может использоваться только с sed, если вы передаете файл, это означает «inline replace». Без этого вывод sed будет записан в stdout (обычно это консольный вывод). С -i он выполняет inline replacement , то есть выполняет замены в самом файле.

Следующий код читает содержимое jasperreports.properties в переменную $ input (строка 1) и находит заменяемую строку (строка 2). В третьей строке он выводит входную строку и передает ее через sed для замены. sed выводит строку на stdout , которая будет улавливаться $ ( и ) и поэтому хранится в $ input .

  читать ввод & lt;  jasperreports.properties find = $ (grep "$ jasper" jasperreports.properties | awk -F "reports /" '{print $ 2}') input = $ (echo "$ input" | sed "s / $ find / charts /"  )  

Если вы хотите немедленно применить изменения к файлу:

  find = $ (grep "$ jasper" jasperreports.properties | awk -F  "reports /" '{print $ 2}') sed "s / $ find / charts /" -i jasperreports.properties  

Из man sed :

  s / regexp / replacement / Попытка совместить регулярное выражение с пространством рисунка.  В случае успеха замените эту часть, соответствующую замене.  Замена может содержать специальный символ & amp;  чтобы ссылаться на ту часть пространства шаблонов, которая была сопоставлена, и специальные escape-последовательности с \ от 1 до 9, чтобы ссылаться на соответствующие соответствующие подвыражения в regexp.   
1
ответ дан 10 August 2018 в 10:07

-i может использоваться только с sed, если вы передаете файл, это означает «inline replace». Без этого вывод sed будет записан в stdout (обычно это консольный вывод). С -i он выполняет inline replacement , то есть выполняет замены в самом файле.

Следующий код читает содержимое jasperreports.properties в переменную $ input (строка 1) и находит заменяемую строку (строка 2). В третьей строке он выводит входную строку и передает ее через sed для замены. sed выводит строку на stdout , которая будет улавливаться $ ( и ) и поэтому хранится в $ input .

  читать ввод & lt;  jasperreports.properties find = $ (grep "$ jasper" jasperreports.properties | awk -F "reports /" '{print $ 2}') input = $ (echo "$ input" | sed "s / $ find / charts /"  )  

Если вы хотите немедленно применить изменения к файлу:

  find = $ (grep "$ jasper" jasperreports.properties | awk -F  "reports /" '{print $ 2}') sed "s / $ find / charts /" -i jasperreports.properties  

Из man sed :

  s / regexp / replacement / Попытка совместить регулярное выражение с пространством рисунка.  В случае успеха замените эту часть, соответствующую замене.  Замена может содержать специальный символ & amp;  чтобы ссылаться на ту часть пространства шаблонов, которая была сопоставлена, и специальные escape-последовательности с \ от 1 до 9, чтобы ссылаться на соответствующие соответствующие подвыражения в regexp.   
1
ответ дан 13 August 2018 в 16:27
  • 1
    но файл jasperreports.properties не изменится! – moata_u 15 March 2011 в 17:46
  • 2
    Я думал, что вы хотите сохранить вывод в строке. Добавлен код для встроенной замены. – Lekensteyn 15 March 2011 в 17:55
  • 3
    прежде всего, ваш ответ был полезен, но я хочу заменить его в файле jasperreports.properties. – moata_u 15 March 2011 в 18:07
  • 4
    @moata_u: как я уже сказал, я добавил код для ответа. Похоже, sed «s / $ find / charts / & quot; -i jasperreports.properties . Обратите внимание, что производится только одна замена на строку. – Lekensteyn 15 March 2011 в 18:10
  • 5
    perfect..100% ,,,, Спасибо – moata_u 15 March 2011 в 18:17

Вы всегда можете указать псевдофайл с синтаксисом подстановки процесса < <(command):

sed -e "/$find/charts" < <(grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}')
1
ответ дан 25 May 2018 в 22:33
  • 1
    я попытался: sed -i " / " редактировать " / c-диаграммы " & Lt; & lt; (edit = grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}'), похоже, не работает !! – moata_u 15 March 2011 в 13:40
  • 2
    Извините, исправлено - вы не должны назначать результат переменной. – l0b0 15 March 2011 в 14:08
  • 3
    Минус для ссылки на страницу, которая дает частично неправильную информацию и использует плохую практику. Лучше всего избегать расширенного руководства по написанию сценариев bash, если вы не знаете, как отфильтровать мусор. mywiki.wooledge.org/ProcessSubstitution дает правильное и более полное объяснение замещения процесса. Кроме того, grep|awk глупо; пусть awk выполнит «greping». – geirha 21 March 2011 в 02:04
jasper=( maps charts widgets )
jasper1=( Maps Charts Widgets )


count=${#jasper[*]}            
jasper_path=`find . -type f -name 'jasperreports.properties'`

count=${#jasper[*]}
for (( i=0;i<$count;i++ )); do
sed -i "/${jasper[i]}.base/c com.jaspersoft.jasperreports.fusion.${jasper[i]}.base.swf.url=https://$host/webcare/reports/${jasper1[i]}" $jasper_path
done

другое решение () find=$(grep "maps.base" jasperreport.properties | awk -F"reports/" '{print $2}';sed "s/$find/$host/" jasperreport.properties > tmp.txt.txt && mv tmp.txt jasperreport.properties

другое решение () 1. Запишите все файлы в каталоге с именем jasperreport. свойства (которые включают 3 строки, как вы видите из предыдущего кода, три строки одинаковые только для разных слов «карты, диаграммы, виджеты») 2. точка для каждой строки индивидуально и изменение IP-адреса хоста для трех трех строк, карты, диаграммы, виджеты »в середине и« Карты, диаграммы, виджеты »в конце и, как вы видите, 3 слова в конце начинают с капитала ...

0
ответ дан 25 May 2018 в 22:33
  • 1
    Ну вот и вы, один sed, это намного лучше :). Вы можете сделать все это в одной строке, используя find и GNU sed: find . -type f -name jasperreport.properties -exec sed -r -i "s#^([^=]*\.)(maps|charts|widgets)(\.base\.swf\.url).*#\1\2\3=https://$host/webcare/reports/\u\2#" {} + – geirha 15 March 2011 в 22:00
  • 2
    :) ... замечательно ... что на 100% отлично работает в ubuntu, я сделаю некоторые изменения, ваш код не будет использовать -i, другой мудрый скрипт не будет работать в Solaris ... – moata_u 15 March 2011 в 22:27
  • 3
    Я не единственная часть, которая там не переносится. Команда Solaris также не знает расширенных регулярных выражений, которые использовались там (-r позволяет ERE). Портативное решение сложнее. Ваш подход в ответе ближе к портативному решению. – geirha 16 March 2011 в 00:45

Вы всегда можете указать псевдофайл с синтаксисом подстановки процесса < <(command):

sed -e "/$find/charts" < <(grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}')
1
ответ дан 25 July 2018 в 22:20
  • 1
    я попытался: sed -i & quot; / & quot; редактировать & quot; / c-диаграммы & quot; & Lt; & lt; (edit = grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}'), похоже, не работает !! – moata_u 15 March 2011 в 13:40
  • 2
    Извините, исправлено - вы не должны назначать результат переменной. – l0b0 15 March 2011 в 14:08
  • 3
    Минус для ссылки на страницу, которая дает частично неправильную информацию и использует плохую практику. Лучше всего избегать расширенного руководства по написанию сценариев bash, если вы не знаете, как отфильтровать мусор. mywiki.wooledge.org/ProcessSubstitution дает правильное и более полное объяснение замещения процесса. Кроме того, grep|awk глупо; пусть awk выполнит «greping». – geirha 21 March 2011 в 02:04
jasper=( maps charts widgets ) jasper1=( Maps Charts Widgets ) count=${#jasper[*]} jasper_path=`find . -type f -name 'jasperreports.properties'` count=${#jasper[*]} for (( i=0;i<$count;i++ )); do sed -i "/${jasper[i]}.base/c com.jaspersoft.jasperreports.fusion.${jasper[i]}.base.swf.url=https://$host/webcare/reports/${jasper1[i]}" $jasper_path done

другое решение () find=$(grep "maps.base" jasperreport.properties | awk -F"reports/" '{print $2}';sed "s/$find/$host/" jasperreport.properties > tmp.txt.txt && mv tmp.txt jasperreport.properties

другое решение () 1. Запишите все файлы в каталоге с именем jasperreport. свойства (которые включают 3 строки, как вы видите из предыдущего кода, три строки одинаковые только для разных слов «карты, диаграммы, виджеты») 2. точка для каждой строки индивидуально и изменение IP-адреса хоста для трех трех строк, карты, диаграммы, виджеты »в середине и« Карты, диаграммы, виджеты »в конце и, как вы видите, 3 слова в конце начинают с капитала ...

0
ответ дан 25 July 2018 в 22:20
  • 1
    Ну вот и вы, один sed, это намного лучше :). Вы можете сделать все это в одной строке, используя find и GNU sed: find . -type f -name jasperreport.properties -exec sed -r -i "s#^([^=]*\.)(maps|charts|widgets)(\.base\.swf\.url).*#\1\2\3=https://$host/webcare/reports/\u\2#" {} + – geirha 15 March 2011 в 22:00
  • 2
    :) ... замечательно ... что на 100% отлично работает в ubuntu, я сделаю некоторые изменения, ваш код не будет использовать -i, другой мудрый скрипт не будет работать в Solaris ... – moata_u 15 March 2011 в 22:27
  • 3
    Я не единственная часть, которая там не переносится. Команда Solaris также не знает расширенных регулярных выражений, которые использовались там (-r позволяет ERE). Портативное решение сложнее. Ваш подход в ответе ближе к портативному решению. – geirha 16 March 2011 в 00:45

Вы всегда можете указать псевдофайл с синтаксисом подстановки процесса < <(command):

sed -e "/$find/charts" < <(grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}')
1
ответ дан 26 July 2018 в 20:51
  • 1
    я попытался: sed -i & quot; / & quot; редактировать & quot; / c-диаграммы & quot; & Lt; & lt; (edit = grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}'), похоже, не работает !! – moata_u 15 March 2011 в 13:40
  • 2
    Извините, исправлено - вы не должны назначать результат переменной. – l0b0 15 March 2011 в 14:08
  • 3
    Минус для ссылки на страницу, которая дает частично неправильную информацию и использует плохую практику. Лучше всего избегать расширенного руководства по написанию сценариев bash, если вы не знаете, как отфильтровать мусор. mywiki.wooledge.org/ProcessSubstitution дает правильное и более полное объяснение замещения процесса. Кроме того, grep|awk глупо; пусть awk выполнит «greping». – geirha 21 March 2011 в 02:04
jasper=( maps charts widgets ) jasper1=( Maps Charts Widgets ) count=${#jasper[*]} jasper_path=`find . -type f -name 'jasperreports.properties'` count=${#jasper[*]} for (( i=0;i<$count;i++ )); do sed -i "/${jasper[i]}.base/c com.jaspersoft.jasperreports.fusion.${jasper[i]}.base.swf.url=https://$host/webcare/reports/${jasper1[i]}" $jasper_path done

другое решение () find=$(grep "maps.base" jasperreport.properties | awk -F"reports/" '{print $2}';sed "s/$find/$host/" jasperreport.properties > tmp.txt.txt && mv tmp.txt jasperreport.properties

другое решение () 1. Запишите все файлы в каталоге с именем jasperreport. свойства (которые включают 3 строки, как вы видите из предыдущего кода, три строки одинаковые только для разных слов «карты, диаграммы, виджеты») 2. точка для каждой строки индивидуально и изменение IP-адреса хоста для трех трех строк, карты, диаграммы, виджеты »в середине и« Карты, диаграммы, виджеты »в конце и, как вы видите, 3 слова в конце начинают с капитала ...

0
ответ дан 26 July 2018 в 20:51
  • 1
    Ну вот и вы, один sed, это намного лучше :). Вы можете сделать все это в одной строке, используя find и GNU sed: find . -type f -name jasperreport.properties -exec sed -r -i "s#^([^=]*\.)(maps|charts|widgets)(\.base\.swf\.url).*#\1\2\3=https://$host/webcare/reports/\u\2#" {} + – geirha 15 March 2011 в 22:00
  • 2
    :) ... замечательно ... что на 100% отлично работает в ubuntu, я сделаю некоторые изменения, ваш код не будет использовать -i, другой мудрый скрипт не будет работать в Solaris ... – moata_u 15 March 2011 в 22:27
  • 3
    Я не единственная часть, которая там не переносится. Команда Solaris также не знает расширенных регулярных выражений, которые использовались там (-r позволяет ERE). Портативное решение сложнее. Ваш подход в ответе ближе к портативному решению. – geirha 16 March 2011 в 00:45

Вы всегда можете указать псевдофайл с синтаксисом подстановки процесса < <(command):

sed -e "/$find/charts" < <(grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}')
1
ответ дан 2 August 2018 в 03:48
  • 1
    я попытался: sed -i & quot; / & quot; редактировать & quot; / c-диаграммы & quot; & Lt; & lt; (edit = grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}'), похоже, не работает !! – moata_u 15 March 2011 в 13:40
  • 2
    Извините, исправлено - вы не должны назначать результат переменной. – l0b0 15 March 2011 в 14:08
  • 3
    Минус для ссылки на страницу, которая дает частично неправильную информацию и использует плохую практику. Лучше всего избегать расширенного руководства по написанию сценариев bash, если вы не знаете, как отфильтровать мусор. mywiki.wooledge.org/ProcessSubstitution дает правильное и более полное объяснение замещения процесса. Кроме того, grep|awk глупо; пусть awk выполнит «greping». – geirha 21 March 2011 в 02:04
jasper=( maps charts widgets ) jasper1=( Maps Charts Widgets ) count=${#jasper[*]} jasper_path=`find . -type f -name 'jasperreports.properties'` count=${#jasper[*]} for (( i=0;i<$count;i++ )); do sed -i "/${jasper[i]}.base/c com.jaspersoft.jasperreports.fusion.${jasper[i]}.base.swf.url=https://$host/webcare/reports/${jasper1[i]}" $jasper_path done

другое решение () find=$(grep "maps.base" jasperreport.properties | awk -F"reports/" '{print $2}';sed "s/$find/$host/" jasperreport.properties > tmp.txt.txt && mv tmp.txt jasperreport.properties

другое решение () 1. Запишите все файлы в каталоге с именем jasperreport. свойства (которые включают 3 строки, как вы видите из предыдущего кода, три строки одинаковые только для разных слов «карты, диаграммы, виджеты») 2. точка для каждой строки индивидуально и изменение IP-адреса хоста для трех трех строк, карты, диаграммы, виджеты »в середине и« Карты, диаграммы, виджеты »в конце и, как вы видите, 3 слова в конце начинают с капитала ...

0
ответ дан 2 August 2018 в 03:48
  • 1
    Ну вот и вы, один sed, это намного лучше :). Вы можете сделать все это в одной строке, используя find и GNU sed: find . -type f -name jasperreport.properties -exec sed -r -i "s#^([^=]*\.)(maps|charts|widgets)(\.base\.swf\.url).*#\1\2\3=https://$host/webcare/reports/\u\2#" {} + – geirha 15 March 2011 в 22:00
  • 2
    :) ... замечательно ... что на 100% отлично работает в ubuntu, я сделаю некоторые изменения, ваш код не будет использовать -i, другой мудрый скрипт не будет работать в Solaris ... – moata_u 15 March 2011 в 22:27
  • 3
    я не единственная часть, которая не есть портативный. Солярис х САС тоже не знаю расширенных регулярных выражений, который был использован там (-R включает ЭРД). Портативное решение сложнее. Ваш подход в ответ ближе к портативное решение. – geirha 16 March 2011 в 00:45

Вы всегда можете указать псевдофайл с синтаксисом подстановки процесса < <(command):

sed -e "/$find/charts" < <(grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}')
1
ответ дан 4 August 2018 в 19:52
  • 1
    я попытался: sed -i & quot; / & quot; редактировать & quot; / c-диаграммы & quot; & Lt; & lt; (edit = grep "$jasper" jasperreports.properties | awk -F"reports/" '{print $2}'), похоже, не работает !! – moata_u 15 March 2011 в 13:40
  • 2
    Извините, исправлено - вы не должны назначать результат переменной. – l0b0 15 March 2011 в 14:08
  • 3
    Минус для ссылки на страницу, которая дает частично неправильную информацию и использует плохую практику. Лучше всего избегать расширенного руководства по написанию сценариев bash, если вы не знаете, как отфильтровать мусор. mywiki.wooledge.org/ProcessSubstitution дает правильное и более полное объяснение замещения процесса. Кроме того, grep|awk глупо; пусть awk выполнит «greping». – geirha 21 March 2011 в 02:04
jasper=( maps charts widgets ) jasper1=( Maps Charts Widgets ) count=${#jasper[*]} jasper_path=`find . -type f -name 'jasperreports.properties'` count=${#jasper[*]} for (( i=0;i<$count;i++ )); do sed -i "/${jasper[i]}.base/c com.jaspersoft.jasperreports.fusion.${jasper[i]}.base.swf.url=https://$host/webcare/reports/${jasper1[i]}" $jasper_path done

другое решение () find=$(grep "maps.base" jasperreport.properties | awk -F"reports/" '{print $2}';sed "s/$find/$host/" jasperreport.properties > tmp.txt.txt && mv tmp.txt jasperreport.properties

другое решение () 1. Запишите все файлы в каталоге с именем jasperreport. свойства (которые включают 3 строки, как вы видите из предыдущего кода, три строки одинаковые только для разных слов «карты, диаграммы, виджеты») 2. точка для каждой строки индивидуально и изменение IP-адреса хоста для трех трех строк, карты, диаграммы, виджеты »в середине и« Карты, диаграммы, виджеты »в конце и, как вы видите, 3 слова в конце начинают с капитала ...

0
ответ дан 4 August 2018 в 19:52
  • 1
    Ну вот и вы, один sed, это намного лучше :). Вы можете сделать все это в одной строке, используя find и GNU sed: find . -type f -name jasperreport.properties -exec sed -r -i "s#^([^=]*\.)(maps|charts|widgets)(\.base\.swf\.url).*#\1\2\3=https://$host/webcare/reports/\u\2#" {} + – geirha 15 March 2011 в 22:00
  • 2
    :) ... замечательно ... что на 100% отлично работает в ubuntu, я сделаю некоторые изменения, ваш код не будет использовать -i, другой мудрый скрипт не будет работать в Solaris ... – moata_u 15 March 2011 в 22:27
  • 3
    Я не единственная часть, которая там не переносится. Команда Solaris также не знает расширенных регулярных выражений, которые использовались там (-r позволяет ERE). Портативное решение сложнее. Ваш подход в ответе ближе к портативному решению. – geirha 16 March 2011 в 00:45
  jasper = (виджеты графиков карт) jasper1 = (Виджеты карт карт) count = $ {# jasper [*]} jasper_path = `find.  -type f -name 'jasperreports.properties`` count = $ {# jasper [*]} for ((i = 0; i & lt; $ count; i ++));  do sed -i "/${jasper[i]}.base/c com.jaspersoft.jasperreports.fusion. $ {jasper [i]} .base.swf.url = https: // $ host / webcare / reports /  $ {jasper1 [i]} "$ jasper_path done  

другое решение () find = $ (grep" maps.base "jasperreport.properties | awk -F" reports / " '{print $ 2}'; sed 's / $ find / $ host / "jasperreport.properties & gt; tmp.txt.txt & amp; mv tmp.txt jasperreport.properties

то, что я пытаюсь сделать, это следующее: 1. просмотреть все файлы в каталоге, которые имеют имя jasperreport.properties (которые включают 3 строки, как вы видите из предыдущего кода, три строки одинаковые только для разных слов «карты, диаграммы, виджеты»). укажите каждую строку индивидуально и измените адрес IP-адреса хоста на три три строки, с заботой о том, чтобы сохранить «карты, диаграммы, виджеты» посередине и «Карты, диаграммы, виджеты» в конце и, как вы видите, 3 слова на end start with capital ...

0
ответ дан 6 August 2018 в 03:55

Вы всегда можете предоставить псевдофайл файлу & lt; (command) синтаксис замены процесса :

  sed -e "/ $ find / charts" & lt;  & lt; (grep "$ jasper" jasperreports.properties | awk -F "reports /" '{print $ 2}')  
1
ответ дан 6 August 2018 в 03:55
  jasper = (виджеты графиков карт) jasper1 = (Виджеты карт карт) count = $ {# jasper [*]} jasper_path = `find.  -type f -name 'jasperreports.properties`` count = $ {# jasper [*]} for ((i = 0; i & lt; $ count; i ++));  do sed -i "/${jasper[i]}.base/c com.jaspersoft.jasperreports.fusion. $ {jasper [i]} .base.swf.url = https: // $ host / webcare / reports /  $ {jasper1 [i]} "$ jasper_path done  

другое решение () find = $ (grep" maps.base "jasperreport.properties | awk -F" reports / " '{print $ 2}'; sed 's / $ find / $ host / "jasperreport.properties & gt; tmp.txt.txt & amp; mv tmp.txt jasperreport.properties

то, что я пытаюсь сделать, это следующее: 1. просмотреть все файлы в каталоге, которые имеют имя jasperreport.properties (которые включают 3 строки, как вы видите из предыдущего кода, три строки одинаковые только для разных слов «карты, диаграммы, виджеты»). укажите каждую строку индивидуально и измените адрес IP-адреса хоста на три три строки, с заботой о том, чтобы сохранить «карты, диаграммы, виджеты» посередине и «Карты, диаграммы, виджеты» в конце и, как вы видите, 3 слова на end start with capital ...

0
ответ дан 7 August 2018 в 21:52

Вы всегда можете предоставить псевдофайл файлу & lt; (command) синтаксис замены процесса :

  sed -e "/ $ find / charts" & lt;  & lt; (grep "$ jasper" jasperreports.properties | awk -F "reports /" '{print $ 2}')  
1
ответ дан 7 August 2018 в 21:52
  jasper = (виджеты графиков карт) jasper1 = (Виджеты карт карт) count = $ {# jasper [*]} jasper_path = `find.  -type f -name 'jasperreports.properties`` count = $ {# jasper [*]} for ((i = 0; i & lt; $ count; i ++));  do sed -i "/${jasper[i]}.base/c com.jaspersoft.jasperreports.fusion. $ {jasper [i]} .base.swf.url = https: // $ host / webcare / reports /  $ {jasper1 [i]} "$ jasper_path done  

другое решение () find = $ (grep" maps.base "jasperreport.properties | awk -F" reports / " '{print $ 2}'; sed 's / $ find / $ host / "jasperreport.properties & gt; tmp.txt.txt & amp; mv tmp.txt jasperreport.properties

то, что я пытаюсь сделать, это следующее: 1. просмотреть все файлы в каталоге, которые имеют имя jasperreport.properties (которые включают 3 строки, как вы видите из предыдущего кода, три строки одинаковые только для разных слов «карты, диаграммы, виджеты»). укажите каждую строку индивидуально и измените адрес IP-адреса хоста на три три строки, с заботой о том, чтобы сохранить «карты, диаграммы, виджеты» посередине и «Карты, диаграммы, виджеты» в конце и, как вы видите, 3 слова на end start with capital ...

0
ответ дан 10 August 2018 в 10:07

Вы всегда можете предоставить псевдофайл файлу & lt; (command) синтаксис замены процесса :

  sed -e "/ $ find / charts" & lt;  & lt; (grep "$ jasper" jasperreports.properties | awk -F "reports /" '{print $ 2}')  
1
ответ дан 10 August 2018 в 10:07
  jasper = (виджеты графиков карт) jasper1 = (Виджеты карт карт) count = $ {# jasper [*]} jasper_path = `find.  -type f -name 'jasperreports.properties`` count = $ {# jasper [*]} for ((i = 0; i & lt; $ count; i ++));  do sed -i "/${jasper[i]}.base/c com.jaspersoft.jasperreports.fusion. $ {jasper [i]} .base.swf.url = https: // $ host / webcare / reports /  $ {jasper1 [i]} "$ jasper_path done  

другое решение () find = $ (grep" maps.base "jasperreport.properties | awk -F" reports / " '{print $ 2}'; sed 's / $ find / $ host / "jasperreport.properties & gt; tmp.txt.txt & amp; mv tmp.txt jasperreport.properties

то, что я пытаюсь сделать, это следующее: 1. просмотреть все файлы в каталоге, которые имеют имя jasperreport.properties (которые включают 3 строки, как вы видите из предыдущего кода, три строки одинаковые только для разных слов «карты, диаграммы, виджеты»). укажите каждую строку индивидуально и измените адрес IP-адреса хоста на три три строки, с заботой о том, чтобы сохранить «карты, диаграммы, виджеты» посередине и «Карты, диаграммы, виджеты» в конце и, как вы видите, 3 слова на end start with capital ...

0
ответ дан 13 August 2018 в 16:27
  • 1
    Ну вот и вы, один sed, это намного лучше :). Вы можете сделать все это в одной строке, используя find и GNU sed: find. -type f -name jasperreport.properties -exec sed -r -i 's # ^ ([^ =] * \.) (карты | диаграммы | виджеты) (\. base \ .swf \ .url). * # \ 1 \ 2 \ 3 = HTTPS: // $ хост / webcare / отчеты / \ и \ 2 # & Quot; {} + – geirha 15 March 2011 в 22:00
  • 2
    :) ... замечательно ... что на 100% отлично работает в ubuntu, я сделаю некоторые изменения, ваш код не будет использовать -i, другой мудрый скрипт не будет работать в Solaris ... – moata_u 15 March 2011 в 22:27
  • 3
    Я не единственная часть, которая там не переносится. Команда Solaris также не знает расширенных регулярных выражений, которые использовались там (-r позволяет ERE). Портативное решение сложнее. Ваш подход в ответе ближе к портативному решению. – geirha 16 March 2011 в 00:45

Вы всегда можете предоставить псевдофайл файлу & lt; (command) синтаксис замены процесса :

  sed -e "/ $ find / charts" & lt;  & lt; (grep "$ jasper" jasperreports.properties | awk -F "reports /" '{print $ 2}')  
1
ответ дан 13 August 2018 в 16:27
  • 1
    я попытался: sed -i & quot; / & quot; редактировать & quot; / c-диаграммы & quot; & Lt; & lt; (edit = grep "$ jasper" jasperreports.properties | awk -F "reports / & quot; '{print $ 2}' ), похоже, не работает !! – moata_u 15 March 2011 в 13:40
  • 2
    Извините, исправлено - вы не должны назначать результат переменной. – l0b0 15 March 2011 в 14:08
  • 3
    Минус для ссылки на страницу, которая дает частично неправильную информацию и использует плохую практику. Лучше всего избегать расширенного руководства по написанию сценариев bash, если вы не знаете, как отфильтровать мусор. mywiki.wooledge.org/ProcessSubstitution дает правильное и более полное объяснение замещения процесса. Кроме того, grep | awk глупо; пусть awk выполнит «greping». – geirha 21 March 2011 в 02:04

Другие вопросы по тегам:

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