Powershell не жадная замена до шаблона

У меня есть файл с несколькими строками, как показано в примере ниже, но мне нужно, чтобы символы, упомянутые в шаблоне, присутствовали в выводе, другими словами, не жадное совпадение.

Мне нужен способ удалить первую часть строки и получить строку, которая начинается с «07» или «08» и все в строке до конца строки.

Пример:

  • Ввод: 'SELECT TZ_OFFSET (SESSIONTIMEZONE) FROM DUAL07.16.0162 (B0375, U0847)'
    • вывод: 07.16.0162 (B0375, U0207)
  • Ввод: 'SELECT TZ_OFFSET (SESSIONTIMEZONE) FROM DUAL08.15.0162 (B03075, U07)'
    • вывод: 08.15.0162 (B08075, U07)

Нежадный не означает, что символы не добавляются в вывод. Вы здесь путаете понятия. Какой у вас текущий код? Что не работает?

Wiktor Stribiżew 31.10.2018 14:12

Не жадный - в идеале, я бы хотел удалить все символы до 07, но включить 07 в выходную строку. Итак, я пробовал `inputStr -replace '^. *? 07 (. *) $', '$ 1' ', но результат из этого' .16.0162 (B0375, U0847) 'и ожидаемый результат: '07 .16.0162 (B0375 , U0847)»

Priya 01.11.2018 06:27
2
2
161
2

Ответы 2

Это должно работать:

$str = 'SELECT TZ_OFFSET (SESSIONTIMEZONE) FROM DUAL07.16.0162 (B0375, U0847)' 
$str -replace '^.*?DUAL(.*)$','$1'

Ага, это то, что я искал. file = "c: \ abc.txt" (Get-Content -Path $ file) -replace '^. *? DUAL (. *) $', '$ 1' | set-content $ file Спасибо!

Priya 31.10.2018 19:26
New-Variable -Name file -Value "c:\abc.txt" #This file contains the line that needs to be edited
(Get-Content -Path $file) -replace '^.*?DUAL(.*)$','$1'|set-content $file

Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и / или почему он решает проблему, улучшит долгосрочную ценность ответа.

stop-cran 01.11.2018 15:47

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