"Map<String , String > map = new HapshMap<String , String>;
map.add("one","java");
map.add("two" ,"spring");
Set<Entry<String,String>> set = map.entrySet();
List<Entry<String , String>> list = new ArrayList<Entry<String , String>> (set);
for(Entry<String , String> entry : list ) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
} "
sed отлично подходит для s / old / new, но для всего остального просто используйте awk:
$ awk 'NR==FNR{new=new [110] ORS; next} {print} [110]=="/def/ghi/jkl"{printf "%s", new}' numbers letters
/abc/def/ghi
/def/ghi/jkl
123
/ghi/jkl/mno
Вышеописанное будет работать в любом awk в любой оболочке на любой коробке UNIX для любого содержимого любого входные файлы. Он просто создает переменную с именем «new», читая numbers
по одной строке за раз и конкатенируя, затем читает letters
и печатает текущую строку, а затем печатает содержимое new
, если текущая строка - это строка интересует.
Команде r
может предшествовать ноль или один адрес.
Из документации sed
:
Sed Addresses
Адрес не требуется, но если указан, должен быть числом (которое подсчитывает входные строки в совокупности во входных файлах), символом доллара (
'), который относится к последней строке ввода, или адресом контекста (который состоит из регулярного выражения, перед которым следует разделитель, а за которым следует разделитель). [ 1127] blockquote>
), который относится к последней строке ввода, или адресом контекста (который состоит из регулярного выражения, перед которым следует разделитель, а за которым следует разделитель). [ 1127] blockquote>В ваших примерах не используется число или
$
в качестве спецификатора адреса. Единственная оставшаяся опция - это регулярное выражение, заключенное в разделители. Разделителем по умолчанию дляregex
вsed
является косая черта (/
).Поскольку
/
является разделителемregex
, любое использование/
внутриregex
необходимо избегать (т. Е. Ему предшествует\
).
Команда, которая вам нужна:sed -i '/\/def\/ghi\/jkl/ r numbers' letters2
Чтобы использовать другой разделитель для регулярного выражения (чтобы избежать необходимости избегать прямой косой черты), вы должны ставить перед ним обратную косую черту, когда он используется в качестве открытого разделителя. (до адреса). Не избегайте его, когда он используется после
regex
. Выход из него внутриregex
говоритsed
использовать его буквальное значение.Команда в этом случае:
sed -i '\@/def/ghi/jkl@ r numbers' letters2
Пример, который вы утверждаете, работает (
sed -i "def r numbers" letters
), не следует этому шаблону и фактически не работает (по крайней мере, на macOSsed
я использую).
Это должно бытьsed -i "/def/ r numbers" letters
или, если быть более точным,sed -i "/^def$/ r numbers" letters
.В ваших примерах не используется число или
$
в качестве спецификатора адреса. Единственная оставшаяся опция - это регулярное выражение, заключенное в разделители. Разделителем по умолчанию дляregex
вsed
является косая черта (/
).Поскольку
[110]/
является разделителемregex
, любое использование/
внутриregex
необходимо избегать (т. Е. Ему предшествует\
).
Команда, которая вам нужна:Чтобы использовать другой разделитель для регулярного выражения (чтобы избежать необходимости избегать прямой косой черты), вы должны ставить перед ним обратную косую черту, когда он используется в качестве открытого разделителя. (до адреса). Не избегайте его, когда он используется после
regex
. Выход из него внутриregex
говоритsed
использовать его буквальное значение.Команда в этом случае:
[111]
Пример, который вы утверждаете, работает (
sed -i "def r numbers" letters
), не следует этому шаблону и фактически не работает (по крайней мере, на macOSsed
я использую).
Это должно бытьsed -i "/def/ r numbers" letters
или, если быть более точным,sed -i "/^def$/ r numbers" letters
.