Удалить символ n после определенного слова

Su pregunta cubre una serie de temas, trataré de abordarlos todos.

  1. No estoy seguro de que haya un solo término canónico para la forma en que se invocan las llamadas al sistema, menos aún para una forma específica en la que se invocan las llamadas al sistema (interrupción 0x80 en lugar de SYSENTERoSYSCALL). En x86 -64, la interfaz de llamada al sistema documentada , usando SYSCALL, se describe en System V x86 -64 ABI, pero eso es solo informativo, no normativo. Del mismo modo, aunque la mayoría de la gente entendería de lo que está hablando si se refiriera a él como "i386 Linux kernel ABI" (reemplazando "i386" con cualquier arquitectura de la que esté hablando ), eso también podría ser confuso ya que “kernel ABI” tiene otro significado (en el contexto de los módulos del kernel ), y nuevamente eso no se limita a la interrupción 0x80.

    En la práctica, la mayoría de las personas no deberían preocuparse por los detalles hasta este nivel de detalle de todos modos, especialmente porque pueden evolucionar :interrumpir 0x80, SYSCALLetc. como mencionas, pero también el vDSO que presenta su propias sutilezas y es el punto de entrada preferido para todas las llamadas al sistema en x86 hoy en día... Por supuesto, esto no significa que no pueda haber un término para referirse a una convención de llamadas específica, pero no estoy seguro de que sea todo lo que útil.

  2. Windows también admite el uso de una interrupción para su interfaz de llamada al sistema, 0x2E, pero su "convención de llamada" es bastante diferente:Los argumentos se insertan en la pila, la llamada al sistema solicitada la proporciona EAX y EBX apunta a los argumentos en la pila.

  3. Los núcleos x86 actuales definen la interfaz de llamada del sistema enarch/x86/entry:entry_32.Scontiene la interfaz i386,entry_64.Sla interfaz x86 -32 y x86 -64,entry_64_compat.Sla 32 -bit x86 -64 (para compatibilidad con versiones anteriores ),syscalls/syscall_32.tblla tabla de llamadas del sistema i386,syscalls/syscall_64.tblla tabla de llamadas del sistema x86 -32 y x86 -64.

    Los comentarios en esos archivos documentan la interfaz, en particular cómo se pasan los argumentos :para llamadas de 32 -bits, EAX contiene el número de llamada del sistema y sus parámetros se colocan en EBX, ECX, EDX, ESI, EDI y EBP (el parámetro en sí para SYSENTER, un puntero a la pila de usuario que contiene el parámetro para la interrupción 0x80 ); para llamadas de 64 -bits, RAX contiene el número de llamada del sistema y sus parámetros se ubican en RDI, RSI, RDX, R10, R8 y R9 (consulte también ¿Por qué cambiaron los registros y el orden de las llamadas al sistema? de Intel de 32 bits a 64 bits?). Hay un buen resumen con diagramas encalling.h.

Como nota al margen, las comparaciones históricas a menudo se refieren a la interfaz de llamada MS -DOS, que usaba principalmente interrupt 0x21 ; también incluía la interrupción multiplex, 0x2F , que proporcionaba un mecanismo extensible para agregar servicios del sistema (que generalmente involucran TSR; los controladores de dispositivos en su mayoría usaban una interfaz diferente ).

0
17.07.2019, 16:34
5 ответов

Попробуйте это,

  awk -F '[.]xml' '{print $1}' file

или по-вашему...

 awk '{gsub(/\.xml.*/,"",$1)}9' file
1
28.01.2020, 02:29

Вы также можете использовать скриптовый редактор, ed!

Следующее выводит две команды, разделенные новой строкой -, для ed, которых мы просим молча отредактировать данныйfilename:

printf '%s\n' '%s/\.xml.*/.xml/' 'wq' | ed -s filename
  1. %s/\.xml.*/.xml/--в каждой строке найдите и замените текст .xml, за которым следует что угодно, просто.xml
  2. wq--записать файл обратно на диск и выйти
0
28.01.2020, 02:29

Я знаю, что на него уже ответили но просто другой способ сделать это, используяcut

cat file | cut -d "." -f 1
0
28.01.2020, 02:29

Используйте sed, швейцарский армейский нож для обработки текста:

sed 's/\.xml.*//' File
0
28.01.2020, 02:29

Попытался использовать приведенные ниже команды, все сработало

команда1:

awk '{gsub(/\.xml.*/,"",$0);print $0}' filename

команда2:

awk -F ".xml" '{print $1}' filename

команда3

awk '{print substr($0,1,6)}' filename

команда4

sed "s/\.xml.*//g" filename

питон

#!/usr/bin/python
k=open('filename','r')
for i in k:
    print i.split('.xml')[0]
1
28.01.2020, 02:29

Теги

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