AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / 问题

All perguntas(coding)

Martin Hope
Rob W.
Asked: 2025-04-10 02:03:30 +0800 CST

Fornecendo restrições para um pacote de parâmetros

  • 8

Tenho uma classe modelo que contém uma tupla.

template <class... SomeTypes>
class Foo
{ ... };

Como posso aplicar uma restrição aos tipos contidos no pacote de parâmetros SomeTypes? Por exemplo, se eu quisesse garantir que todos os tipos se encaixassem no std::movableconceito?

E se SomeTypestambém houvesse modelos?

template < template<typename> class... SomeTypes>
class Bar
{ ... };

Aqui está um caso mais específico do que estou procurando. O código não deveria (e não compila) porque FooBnão é copiável.

Infelizmente, o compilador não exibe as melhores mensagens de erro quando isso acontece (no código com o qual estou lidando, os tipos são mais complexos e isso resulta em listas de erros gigantescas). Espero poder adicionar algum tipo de requirescláusula FooContainerque gere um erro muito mais claro.

#include <tuple>
#include <concepts>

template <typename ContainerType>
class Foo
{
};

template <typename ContainerType>
class FooA : public Foo<ContainerType>
{
    public:
    int some_data {0};

    void DoSomething()
    {
        some_data++;
    }
};

template <typename ContainerType>
class FooB : public Foo<ContainerType>
{
    public:
    // non-copyable object
    FooB() = default;
    FooB( const FooB& ) = delete;
    FooB& operator=( const FooB& ) = delete;
    ~FooB() = default;

    int some_data {0};

    void DoSomething()
    {
        some_data++;
    }
};


template < template<typename> class... SomeTypes>
// requires (std::copyable<SomeTypes...>) ???
class FooContainer
{
    public:
    std::tuple<SomeTypes<FooContainer>...> my_tuple;

    template <std::size_t I = 0, std::enable_if_t<I == sizeof...(SomeTypes)>* = nullptr>
    void DoAllThings()
    {
    }

    template <std::size_t I = 0, std::enable_if_t<I < sizeof...(SomeTypes)>* = nullptr>
    void DoAllThings()
    {
        std::get<I>(my_tuple).DoSomething();
        DoAllThings<I + 1>();
    }
};


using MyContainer = FooContainer<FooA, FooB>;

int main()
{
    MyContainer my_bar;
    my_bar.DoAllThings();
    MyContainer my_bar2 = my_bar;
}

--Edição 2--

Então, depois de brincar com algumas das sugestões aqui, o mais próximo que cheguei do que eu queria foi usar uma função estática externa para fazer a verificação.

template <typename FooType>
requires (std::copyable<FooType>)
constexpr bool FooTypeCheck()
{
    return true;
}

static_assert(FooTypeCheck<FooA<int>>());

Isso me dá a verificação que eu quero (se a classe Foo derivada é copiável) e, portanto, a saída do compilador mais fácil de ler se a verificação falhar. Para fins de verificação de tipo, o ContainerType não importa, então eu apenas passo um int. Infelizmente, isso também significa que preciso adicionar o static_assert para cada classe Foo derivada, e o int que eu passo para ContainerType é um pouco estranho.

--Edição Final (Resposta)-- Dei os créditos a @Ted Lyngmo pela resposta, pois estava próxima do que eu precisava. Como o parâmetro ContainerType é apenas parte do CRTP, ele realmente não importa para os propósitos da restrição, e posso usar apenas int, e a solução é um pouco mais simples.

template <template <typename> class FooType>
concept FooTypeCheck = std::copyable<FooType<int>>;

template < template<typename> class... SomeTypes>
requires (... && FooTypeCheck<SomeTypes>)
class FooContainer
{ ... };
c++
  • 3 respostas
  • 172 Views
Martin Hope
Sergiu Starciuc
Asked: 2025-04-10 00:15:02 +0800 CST

Como gerar HMAC no Haskell Crypton, como com o openssl HMAC?

  • 8

Usando cryptono pacote Haskell, estou tentando gerar a mesma saída, openssl dgstmas não consigo descobrir o que estou fazendo errado. Por favor, ajudem.

openssl dgst:

$ echo "TheMessage" | openssl dgst -sha256 -mac HMAC -macopt key:"TheKey"
SHA2-256(stdin)= 7b2e5669f4a5fa30a3fa0e9147f8975883cddff77725c99a6db07395b9665974

criptônio:

ghci> hmacGetDigest ( hmac ("TheKey" :: ByteString) ("TheMessage" :: ByteString) :: HMAC SHA256 )
39c17c48adbc2ea4d469af9ecb2569f921053843af2a0a7716b7a180b0cedff6

Obrigado.

haskell
  • 1 respostas
  • 44 Views
Martin Hope
knods
Asked: 2025-04-09 23:05:20 +0800 CST

Existe alguma maneira de evitar clonagens/alocações repetidas neste método Runge-Kutta-Fehlberg?

  • 8

Estou implementando o método Runge-Kutta-Fehlberg 5(4) em Rust, então tenho que monitorar o estado atual do sistema que estou tentando modelar, executar vários cálculos com base no estado atual e, como resultado desses cálculos, atualizar o estado.

No processo, me deparei com problemas de propriedade, porque o nalgebratipo que estou usando não implementa copy. O compilador sugeriu que eu cloneusasse os dados. Acabei com quatro .clone()instruções dentro de um loop e estou pensando sobre o impacto no desempenho, por um lado, e possíveis alternativas, por outro.

Você pode encontrar a função relevante abaixo.

pub fn rkf54(
    initial_time: f64,
    initial_state: State<f64>,
    initial_step_size: f64,
    control: bool,
    tolerance: f64,
    final_time: f64,
    f: &dyn Fn(f64, &State<f64>) -> State<f64>)
    -> Vec<State<f64>> {

    let mut output: Vec<State<f64>> = vec![];

    let mut time = initial_time;
    let mut state = initial_state;
    let mut step_size = initial_step_size;

    while time < final_time  {
        if control {
            // CLONE 1
            step_size = rkf_control(time, state.clone(), initial_step_size, tolerance, f);
        }
        
        // CLONE 2
        let stages = rkf_stages(time, &state.clone(), step_size, A, C, f);

        // CLONE 3
        state = rkf_step(&state.clone(), step_size, &stages, B_PRIMARY);
        time += step_size;


        // CLONE 4
        output.push(state.clone())
    }
    let stages = rkf_stages(final_time, &state.clone(), step_size, A, C, f);
    state = rkf_step(&state.clone(), step_size, &stages, B_PRIMARY);
    output.push(state.clone());

return output;
}

A clonagem repetida afetará significativamente o desempenho? Se entendi corretamente, isso copia os mesmos dados de e para diferentes áreas da memória 4 vezes por iteração.

Se sim, como posso evitar esse tipo de clonagem/alocação?

Aqui está um exemplo funcional completo, juntamente com definições de tipo e constante.

#![allow(dead_code)]

extern crate nalgebra; // 0.33.2

use nalgebra::DVector; // 0.33.2
use std::f64::INFINITY;

type Stages<T, const D: usize> = [DVector<T>; D];
pub type State<T> = DVector<T>;
pub type StageCoefficients<T, const D: usize> = [&'static [T]; D];
pub type Weights<T, const D: usize> = [T; D];

pub const A: StageCoefficients<f64, 6> = [
    &[],
    &[1./4.],
    &[3./32.,       9./32.],
    &[1932./2197.,  -7200./2197.,   7296./2197.],
    &[439./216.,    8.,             3680./513.,     -845./4104.],
    &[-8./27.,      2.,             -3544./2565.,   1859./4104.,    -11./40.]
];

pub const C: Weights<f64, 6> =  [0.0,           1./4.,          3./8.,          12./13.,        1.,         1./2.   ];
pub const B_PRIMARY: Weights<f64, 6> =  [16./135.,      0.,             6656./12825.,   28561./56430.,  -9./50.,    2./55.  ];
pub const B_EMBEDDED: Weights<f64, 6> =     [25./216.,      0.,             1408./2565.,    2197./4104.,    -1./5.,     0.      ];


const K: f64 = 0.02;
const B0: f64 = 3.5;
const B1: f64 = 16.72;

pub fn f(t:f64, state: &State<f64>) -> State<f64> {   
    let x = state[0];
    let y = state [1];
    
    let x_dot = y;
    let y_dot = (-K*y) - (x.powf(3.)) + (B0) + (B1 * t.cos());

    return State::from(vec![x_dot, y_dot]);
}

pub fn rkf54(
    initial_time: f64,
    initial_state: State<f64>,
    initial_step_size: f64,
    control: bool,
    tolerance: f64,
    final_time: f64,
    f: &dyn Fn(f64, &State<f64>) -> State<f64>)
    -> Vec<State<f64>> {

    let mut output: Vec<State<f64>> = vec![];

    let mut time = initial_time;
    let mut state = initial_state;
    let mut step_size = initial_step_size;

    while time < final_time  {
        if control {
            // CLONE 1
            step_size = rkf_control(time, state.clone(), initial_step_size, tolerance, f);
        }
        
        // CLONE 2
        let stages = rkf_stages(time, &state.clone(), step_size, A, C, f);

        // CLONE 3
        state = rkf_step(&state.clone(), step_size, &stages, B_PRIMARY);
        time += step_size;


        // CLONE 4
        output.push(state.clone())
    }
    let stages = rkf_stages(final_time, &state.clone(), step_size, A, C, f);
    state = rkf_step(&state.clone(), step_size, &stages, B_PRIMARY);
    output.push(state.clone());

return output;
}
fn rkf_stages<const D: usize>(
    time: f64,
    state: &State<f64>,
    step_size: f64,
    stage_coefficients: StageCoefficients<f64, D>,
    time_fractions: Weights<f64, D>,
    f: &dyn Fn(f64, &State<f64>) -> State<f64>
    ) -> Stages<f64, D> {

    let mut k: Stages<f64, D> = std::array::from_fn(|_| DVector::zeros(state.nrows()));
    
    for i in 0..stage_coefficients.len() {
        let mut x: State<f64> = DVector::zeros(state.nrows());
        for j in 0..stage_coefficients[i].len() {
            x += &k[j] * stage_coefficients[i][j];
        }
        x = state + step_size*(x);
        let t = time + (step_size*time_fractions[i]);
        k[i] = f(t,&x);
    }

    return k;
}

fn rkf_step<const D: usize>(state: &State<f64>, step_size: f64, stages: &Stages<f64, D>, weights: Weights<f64, D>) -> State<f64> {
    
    let mut x_out = 0.0 * DVector::zeros(state.nrows());

    for i in 0..A.len() {
        x_out += &stages[i] * weights[i];
    }
    x_out *= step_size;
    x_out += state;
    
    return x_out;
}

fn rkf_control(time: f64, state: State<f64>, initial_step_size: f64, tolerance: f64,
    f: &dyn Fn(f64, &State<f64>) -> State<f64>) -> f64 {

    let mut error_estimate = INFINITY;
    let mut step_size = initial_step_size;

    while error_estimate > tolerance {
        let k = rkf_stages(time, &state, step_size, A, C, f);
        let x_primary = rkf_step(&state, step_size, &k, B_PRIMARY);
        let x_embedded = rkf_step(&state, step_size, &k, B_EMBEDDED);

        error_estimate = (x_primary - x_embedded).norm();
        step_size = 0.9 * step_size * (tolerance / error_estimate).powf(1. / 5.);
    }

    return step_size;
}

fn main() {
    let initial_time = 0.;
    let initial_state = State::from(vec![2., 2.]);
    let initial_step_size = 1.;
    let control = true;
    let tolerance = 10e-3;
    let final_time = 1.;

    let output = rkf54(initial_time, initial_state, initial_step_size, control, tolerance, final_time, &f);
    for state in output {
        println!("{state:1.3e}");
    }

}
rust
  • 1 respostas
  • 151 Views
Martin Hope
Karthik S
Asked: 2025-04-09 15:54:32 +0800 CST

CanDeactivate + Botão Voltar do navegador causa navegação dupla ou ignora rota -- Prevenção de retorno do navegador Angular

  • 8

Problema

Estou usando um CanDeactivateprotetor no Angular para avisar o usuário antes de sair de um formulário com alterações não salvas. Funciona bem para alterações de rota normais (por exemplo, clicar em um link), mas trava quando o usuário pressiona o botão Voltar do navegador .

Cenário

Digamos que meu fluxo de roteamento seja:

/home → /usuário → /editar

  • O usuário está conectado /editcom alterações não salvas.
  • Pressiona o botão Voltar do navegador .
  • Uma caixa de diálogo de confirmação é exibida via CanDeactivate.
  • Se o usuário cancelar , a rota permanece a mesma (correta).
  • Mas quando eles pressionam novamente e confirmam , ele navega dois passos para trás /home, pulando/user .

O que eu tentei

Implementei uma CanDeactivateguarda como esta:

export class YourFormComponent implements CanComponentDeactivate, OnInit, AfterViewInit {
    hasUnsavedChanges = false;

    // Implement the canDeactivate method
    canDeactivate(): Observable<boolean> | boolean {
      if (!this.hasUnsavedChanges) {
        return true;
      }

      const confirmLeave = window.confirm('You have unsaved changes. Leave anyway?');
      return confirmLeave;
    }
}

rota.ts

import { Routes } from '@angular/router';
import { YourFormComponent } from './your-form.component';
import { ConfirmLeaveGuard } from './confirm-leave.guard';

const routes: Routes = [
  {
    path: 'form',
    component: YourFormComponent,
    canDeactivate: [ConfirmLeaveGuard]
  }
];

confrim-leave.guard.ts

import { inject } from '@angular/core';
import { CanDeactivateFn } from '@angular/router';
import { Observable } from 'rxjs';
import { Location } from '@angular/common';
export interface CanComponentDeactivate {
  canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;
}

export const ConfirmLeaveGuard: CanDeactivateFn<CanComponentDeactivate> = (component: any, currentRoute, currentState, nextState) => {
  const location = inject(Location);
  const result = component.canDeactivate();

  // If it's a boolean value
  if (typeof result === 'boolean') {
    if (!result) {
      location.replaceState(window.location.pathname); // Restore URL
    }
    return result;
  }

  // If it's an Observable or Promise
  if (result instanceof Observable || result instanceof Promise) {
    return new Promise(resolve => {
      Promise.resolve(result).then(confirmed => {
        if (!confirmed) {
          location.replaceState(window.location.pathname); // Restore URL
        }
        resolve(confirmed);
      });
    });
  }

  return true;
};

Também tentei usar Location.replaceState() ou Location.go() dentro do guarda para restaurar a pilha do histórico, mas ele ainda funciona mal ao usar o botão Voltar.

Pergunta Como posso manipular corretamente o botão Voltar do navegador com CanDeactivate para evitar navegação dupla ou rotas ignoradas?

Qualquer conselho ou exemplo será apreciado.

Exemplo de Stackblitz

Imagem de trabalho - https://s6.imgcdn.dev/YjXe3M.gif

javascript
  • 2 respostas
  • 70 Views
Martin Hope
Zebrafish
Asked: 2025-04-09 15:53:35 +0800 CST

Por que std::floor não é encontrado ao incluir <math.h> em C++23 no Android?

  • 8

Isso parece ser apenas uma pequena peculiaridade que eu poderia corrigir simplesmente incluindo <cmath>onde std::flooré usado, mas ainda assim é estranho e gostaria de saber se alguém sabe o que está acontecendo. Tenho um projeto que consigo compilar em MSVC, GCC e Clang em C++20 e C++23, sem problemas. No Android Studio, consigo compilar em C++20, mas se eu definir o padrão C++20 na minha configuração do CMake, recebo o erro:

erro: nenhum membro chamado 'floor' no namespace 'std'

No lugar onde preciso, incluo <math.h>, o que funcionou bem para todas as outras configurações de compilação. Acho que o math inclui <cmath>. De qualquer forma, posso fazer o erro desaparecer incluindo TAMBÉM <cmath>onde preciso, mas há algum motivo para isso acontecer na compilação do Android com C++23? Tipo, eu já tenho:

#include <math.h>

E com o C++23 no Android Studio eu literalmente tenho que incluir:

#include <cmath>

Para std::floorser reconhecido, as funções estão comentadas. Parece estranho.

c++
  • 3 respostas
  • 166 Views
Martin Hope
vespino
Asked: 2025-04-09 15:14:50 +0800 CST

Estilos personalizados do editor WordPress

  • 8

Usando o código a seguir, estou tentando adicionar algum CSS ao editor Gutenberg padrão no Wordpress:

function editor_style() {
    add_theme_support( 'editor-styles' );
    add_editor_style( 'editor-style.css' );
}
add_action( 'after_setup_theme', 'editor_style' );

Embora isso funcione, também faz o editor parecer estranho:

insira a descrição da imagem aqui

Parece que todos os estilos foram removidos, exceto os da minha folha de estilos personalizada. Isso é intencional? Estou usando Bootstrap no meu tema. Devo incluir isso aqui também?

  • 2 respostas
  • 48 Views
Martin Hope
Akash Arjun
Asked: 2025-04-09 03:59:34 +0800 CST

Terminal ghci sem resposta [duplicado]

  • 8
Esta pergunta já tem respostas aqui :
Haskell: Por que é um problema reatribuir a cauda de uma variável à sua própria variável? (1 resposta)
Tarefa de autorreferência ghci (4 respostas)
O GHCi trava se eu tentar executar um binTree simples [duplicado] (1 resposta)
Fechado ontem .

Li que variáveis ​​são imutáveis ​​em Haskell e algo como o seguinte não funciona em Haskell.

x = 30
x = x+1

Mas ainda tentei isso para ver o que o compilador retorna e obtive o seguinte:

Captura de tela do meu terminal.

O compilador simplesmente para de responder e não faz nada até que eu pressione ctrl+c e o interrompa.

Por que isso acontece e por que o compilador deixa de responder em vez de me retornar algum tipo de erro?

haskell
  • 1 respostas
  • 49 Views
Martin Hope
zagpoint
Asked: 2025-04-09 03:07:32 +0800 CST

Como classificar versões por um atributo de membros da lista

  • 8

Estou tentando obter uma lista classificada corretamente pelo campo " nome " no exemplo de código abaixo:

---
  - hosts: localhost
    vars:
      hosts:
        - name: host2
          uptime: 1d
        - name: host10
          uptime: 45d
        - name: host1
          uptime: 3m

    tasks:
    - name: version sort host list
      debug:
        #var: hosts | community.general.version_sort
        #var: hosts | dictsort(false, 'value')
        var: hosts | sort(attribute='name')

Como você pode ver, ele não classifica os nomes de host corretamente (host2 deve vir antes de host10). Procurei o filtro version_sort, mas ele não suporta classificação por atributo. Entendo que não estaria nessa situação se os nomes de host estivessem preenchidos corretamente. Mas é o que é. Pesquisei e não vi essa pergunta. Alguma outra ideia?

TASK [version sort host list] *************************************
ok: [localhost] => {
    "hosts | sort(attribute='name')": [
        {
            "name": "host1",
            "uptime": "3m"
        },
        {
            "name": "host10",  <-------
            "uptime": "45d"
        },
        {
            "name": "host2",
            "uptime": "1d"
        }
    ]
}

Resumo :

Obrigado a @Vladimir Botka por todas as opções! Consolidei a opção nº 3 e criei o manual abaixo. Observe que atualizei a lista de dicionários para torná-la um pouco mais complexa com o FQDN. Mas a solução funciona:

- hosts: localhost

  vars:
    hosts:
      - {name: host2.example.com, uptime: 1d}
      - {name: host10.example.com, uptime: 45d}
      - {name: host1.example.com, uptime: 3m}
      - {name: host3.example.com, uptime: 3m}
      - {name: host15.example.com, uptime: 45d}
      - {name: host20.example.com, uptime: 45d}
  tasks:
#    - debug:
#        msg: 
#        - "index: {{ hosts | map(attribute='name') | community.general.version_sort }}"
#        - "host_indexed: {{ dict(hosts|json_query('[].[name,@]')) }}"
#        - "solution: {{ (hosts | map(attribute='name') | community.general.version_sort) | map('extract', dict(hosts|json_query('[].[name,@]'))) }}"
    - debug: 
        var: (hosts | map(attribute='name') | community.general.version_sort) | map('extract', dict(hosts|json_query('[].[name,@]'))) 

Aqui está o resultado:

PLAY [localhost] *****************************************************************************************************************************************
    
TASK [Gathering Facts] ***********************************************************************************************************************************
ok: [localhost]
    
TASK [debug] *********************************************************************************************************************************************
[WARNING]: Collection community.general does not support Ansible version 2.14.17
ok: [localhost] => {
    "(hosts | map(attribute='name') | community.general.version_sort) | map('extract', dict(hosts|json_query('[].[name,@]')))": [
        {
            "name": "host1.example.com",
            "uptime": "3m"
        },
        {
            "name": "host2.example.com",
            "uptime": "1d"
        },
        {
            "name": "host3.example.com",
            "uptime": "3m"
        },
        {
            "name": "host10.example.com",
            "uptime": "45d"
        },
        {
            "name": "host15.example.com",
            "uptime": "45d"
        },
        {
            "name": "host20.example.com",
            "uptime": "45d"
        }
    ]
}
    
PLAY RECAP ***********************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
ansible
  • 1 respostas
  • 50 Views
Martin Hope
Marco Frag Delle Monache
Asked: 2025-04-08 22:40:02 +0800 CST

Ignorando silenciosamente "Não foi possível localizar o parâmetro nomeado" para param em subconsulta e paginação

  • 8

Estou executando uma consulta JPA não nativa, que retorna um objeto personalizado.

@Query("""
    SELECT
    new path.to.CustomObject(
        t,
        (select id from users where name = :param1)
        (select id from departments where name IN (:param2))
    )
    FROM timesheets t
    WHERE status = :param3
)
Page<CustomObject> getAll(
    @Param("param1") String param1,
    @Param("param2") List<String> param2,
    @Param("param3") String param3,
    Pageable pageable
)

Quando executo a consulta com paginação padrão (tamanho = 10, página = 0), o registrador imprimirá:

o.s.d.j.r.q.QueryParameterSetter$ErrorHandling: Silently ignoring
java.lang.IllegalArgumentException: Could not locate named parameter [param1], expecting one of [param3]
java.lang.IllegalArgumentException: Could not locate named parameter [param2], expecting one of [param3]

Mas a consulta funciona perfeitamente e retorna os valores corretos, incluindo os das subconsultas. Se eu executar a mesma consulta com um tamanho de página maior (tamanho 30, página = 0), a consulta ainda funciona bem e sem erros. Se eu adicionar uma condição where simples abaixo, por exemplo:

[...]
FROM timesheets t
WHERE status = :param3
AND :param1 = :param1
AND :param2 = :param2

O erro só será gerado param2porque é uma lista. Parece que os parâmetros usados ​​dentro de uma subconsulta são ignorados, mas não consigo entender por que esse truque simples não funciona também para listas.

Gostaria de evitar imprimir exceções "falsas" no registro (já que elas não bloqueiam a execução), então estou procurando uma solução alternativa (como colocá-las em uma condição WHERE sempre verdadeira) ou uma maneira de impedir que o Spring registre as exceções ignoradas silenciosamente.

java
  • 1 respostas
  • 75 Views
Martin Hope
JH Park
Asked: 2025-04-08 05:38:53 +0800 CST

Extraindo strings de um arquivo com sed e expressões regulares

  • 8

Gostaria de perguntar sobre como extrair strings específicas de um arquivo usando sed e expressões regulares.

Abaixo está o exemplo do arquivo de texto de entrada (testfile.txt):

# This file contains a short description of the columns in the
# meta-analysis summary file, named '/some/output/directory/result.txt'

# (Skipping some comment lines...)

# Input for this meta-analysis was stored in the files:
# --> Input File 1 : /some/input/directory/cohort1/dataset1_chrAll.regenie.txt
# --> Input File 2 : /some/input/directory/cohort2/subdir1/chrAll-out.txt
# --> Input File 3 : /some/input/directory/cohort2/subdir2/chrAll-out_ver2.txt
# --> Input File 4 : /some/input/directory/cohort3/resfile.txt
# --> Input File 5 : /some/input/directory/cohort4/regenie_res_chrAll.txt

Deste arquivo, gostaria de extrair a lista de nomes de arquivos de entrada, então o resultado deve ser algo como:

/some/input/directory/cohort1/dataset1_chrAll.regenie.txt
/some/input/directory/cohort2/subdir1/chrAll-out.txt
/some/input/directory/cohort2/subdir2/chrAll-out_ver2.txt
/some/input/directory/cohort3/resfile.txt
/some/input/directory/cohort4/regenie_res_chrAll.txt

Veja abaixo o que eu tentei:

Tentativa 1

Este é o comando inicial que usei.

cat testfile.txt | sed -e 's/\/some\/input\/directory\/([A-z0-9\/\.\-]*)\.txt/$1/g'

Resultado:

sed: -e expression #1, char 55: Invalid range end

Tentativa 2

Depois de alguma pesquisa, tentei escapar dos parênteses usando barras invertidas.

cat testfile.txt | sed -e 's/\/some\/input\/directory\/\([A-z0-9\/\.\-]*\).txt/$1/g'

Resultado:

sed: -e expression #1, char 56: Invalid range end

Então isso não resolveu o problema.

Tentativa 3

Também tentei escapar dos colchetes.

cat testfile.txt | sed -e 's/\/some\/input\/directory\/\(\[A-z0-9\/\.\-\]\*\)\.txt/$1/g'

Resultado:

# This file contains a short description of the columns in the
# meta-analysis summary file, named '/some/output/directory/result.txt'

# (Skipping some comment lines...)

# Input for this meta-analysis was stored in the files:
# --> Input File 1 : /some/input/directory/cohort1/dataset1_chrAll.regenie.txt
# --> Input File 2 : /some/input/directory/cohort2/subdir1/chrAll-out.txt
# --> Input File 3 : /some/input/directory/cohort2/subdir2/chrAll-out_ver2.txt
# --> Input File 4 : /some/input/directory/cohort3/resfile.txt
# --> Input File 5 : /some/input/directory/cohort4/regenie_res_chrAll.txt

Isso não gerou um erro, mas não era isso que eu queria.

Tentativa 4

Por fim, tentei adicionar a opção -r sem escapar parênteses ou colchetes.

cat testfile.txt | sed -re 's/\/some\/input\/directory\/([A-z0-9\/\.\-]*)\.txt/$1/g'

Resultado:

sed: -e expression #1, char 55: Invalid range end

Apareceu a mesma mensagem de erro na primeira tentativa.

Gostaria de perguntar quais são os problemas nas minhas linhas de comando e se há alguma solução possível para isso.

Obrigado.

regex
  • 5 respostas
  • 71 Views
Prev
Próximo

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve