다음을 포함하는 sed 스크립트가 있습니다.
sed -i '/ *it.*do/! {
/\.should/ {
s/\.should/)\.to/
s/\(\S\)/expect(\1/
# ...others
마지막 항목이 줄의 시작 부분에 s
추가됩니다 . expect(
나는 그것이 어떻게 작동하는지 이해하지 못합니다.
이는 다음에 적용됩니다:
원래:
it "uses the given count if set" do
call('5').should == 5
end
it "uses the processor count from Parallel" do
call(nil).should == 20
end
뒤쪽에:
it "uses the given count if set" do
expect(call('5')).to eq 5
end
it "uses the processor count from Parallel" do
expect(call(nil)).to eq 20
end
expect(
그러나 for:는 추가되지 않습니다 .
원래:
it "does not wait if not run in parallel" do
ParallelTests.should_not_receive(:sleep)
ParallelTests.wait_for_other_processes_to_finish
end
it "stops if only itself is running" do
ENV["TEST_ENV_NUMBER"] = "2"
ParallelTests.should_not_receive(:sleep)
with_running_processes(1) do
ParallelTests.wait_for_other_processes_to_finish
end
end
그 후 - 아니 expect(
...
it "does not wait if not run in parallel" do
ParallelTests).to_not receive(:sleep)
ParallelTests.wait_for_other_processes_to_finish
end
it "stops if only itself is running" do
ENV["TEST_ENV_NUMBER"] = "2"
ParallelTests).to_not receive(:sleep)
with_running_processes(1) do
ParallelTests.wait_for_other_processes_to_finish
end
end
그러나 그것은하다근무 시간:
이후:
it "should be true when there is a Gemfile" do
use_temporary_directory_for do
FileUtils.touch("Gemfile")
expect(ParallelTests.send(:bundler_enabled?)).to eq true
end
end
답변1
그것은 단지캐릭터 클래스-r
, 나중에 참조하기 위해 플래그를 설정 \(
하고 \)
그룹을 생성 하지 않고 \S
단지 보완적인 그룹 이기 때문입니다. 공백과 일치하는 그룹은 공백 이외의 모든 것과 일치하는 그룹이기 \s
때문입니다 .\s
\S
이는 공백이 아닌 첫 번째 앞에 정규식이 s/\(\S\)/expect(\1/
추가된다는 의미입니다.expect(
# echo ' ' | sed "s/\(\S\)/expect(\1/"
# echo ' a' | sed "s/\(\S\)/expect(\1/"
expect(a
그래서 제가 말하는 것은 귀하의 스크립트가 다음 줄을 변경한다는 것입니다.
ParallelTests.should_not_receive(:sleep)
그것을 바꿔야 합니다:
# echo "ParallelTests.should_not_receive(:sleep)" | sed '/ *it.*do/! {
/\.should/ {
s/\.should/)\.to/
s/\(\S\)/expect(\1/
}
}'
expect(ParallelTests).to_not_receive(:sleep)